public static void UpdateFolderStructure(TreeNode parentFolderNode, DirectoryInfo di, List <string> invalidFilenames, List <string> extensionsToLoad) { var subNodes = parentFolderNode.Nodes; var subFolders = di.GetDirectories(); foreach (var subFolder in subFolders) { if (!subNodes.ContainsKey(subFolder.Name) || subNodes[subFolder.Name].ImageIndex != 1) { var folderNode = new TreeNode(subFolder.Name) { ImageIndex = 1, SelectedImageIndex = 1, Tag = subFolder.FullName, Name = subFolder.Name }; parentFolderNode.Nodes.Add(folderNode); UpdateFolderStructure(folderNode, subFolder, invalidFilenames, extensionsToLoad); } else { UpdateFolderStructure(subNodes[subFolder.Name], subFolder, invalidFilenames, extensionsToLoad); } } foreach (FileInfo fiChild in di.GetFiles("*.*", SearchOption.TopDirectoryOnly)) { if (WebResource.IsInvalidName(fiChild.Name) || !WebResource.ValidExtensions.Contains(fiChild.Extension.Remove(0, 1).ToLower())) { invalidFilenames.Add(fiChild.FullName); continue; } if (extensionsToLoad == null || extensionsToLoad.Contains(fiChild.Extension)) { if (!subNodes.ContainsKey(fiChild.Name) || subNodes[fiChild.Name].ImageIndex <= 1) { CreateWebResourceNode(fiChild, parentFolderNode); } else { var wr = (WebResource)subNodes[fiChild.Name].Tag; wr.WebResourceEntity["content"] = Convert.ToBase64String(File.ReadAllBytes(wr.FilePath)); } } } }
/// <summary> /// Create a TreeView folder structure depending on the DirectoryInfo /// element in parameters /// </summary> /// <param name="parentFolderNode">Current TreeNode</param> /// <param name="di">Current physical directory info</param> /// <param name="invalidFilenames"></param> /// <param name="inValidWrNameRegex"></param> public static void CreateFolderStructure(TreeNode parentFolderNode, DirectoryInfo di, List <string> invalidFilenames, List <string> extensionsToLoad) { foreach (DirectoryInfo diChild in di.GetDirectories()) { if (WebResource.IsInvalidName(diChild.Name)) { invalidFilenames.Add(diChild.FullName); continue; } // If the current physical directory has sub directories or // javascript file, a new TreeNode has to be created if (diChild.GetDirectories().Length > 0 || diChild.GetFiles("*.*").Length > 0) { var folderNode = new TreeNode(diChild.Name) { ImageIndex = 1, SelectedImageIndex = 1 }; parentFolderNode.Nodes.Add(folderNode); CreateFolderStructure(folderNode, diChild, invalidFilenames, extensionsToLoad); } } foreach (FileInfo fiChild in di.GetFiles("*.*", SearchOption.TopDirectoryOnly)) { if (WebResource.IsInvalidName(fiChild.Name) || !WebResource.ValidExtensions.Contains(fiChild.Extension.Remove(0, 1).ToLower())) { invalidFilenames.Add(fiChild.FullName); continue; } if (extensionsToLoad.Contains(fiChild.Extension)) { // Create a TreeNode for each javascript file CreateWebResourceNode(fiChild, parentFolderNode); } } }
internal static void AddExistingWebResource(TreeView tv, Control mainControl) { TreeNode selectedNode = tv.SelectedNode; TreeNode tempNode = selectedNode; string name = tempNode.Text; while (tempNode.Parent != null) { name = string.Format("{0}/{1}", tempNode.Parent.Text, name); tempNode = tempNode.Parent; } var ofd = new OpenFileDialog { Multiselect = true, Title = "Select file(s) for web resource(s)" }; if (ofd.ShowDialog(mainControl) == DialogResult.OK) { var errorList = new List <string>(); foreach (string fileName in ofd.FileNames) { var fi = new FileInfo(fileName); //Test valid characters if (WebResource.IsInvalidName(fi.Name)) { errorList.Add(fileName); } else { var webResource = new Entity("webresource"); webResource["content"] = Convert.ToBase64String(File.ReadAllBytes(fileName)); webResource["webresourcetype"] = new OptionSetValue(WebResource.GetTypeFromExtension(fi.Extension.Remove(0, 1))); webResource["name"] = string.Format("{0}/{1}", name, fi.Name); webResource["displayname"] = string.Format("{0}/{1}", name, fi.Name); var wr = new WebResource(webResource, fileName); var node = new TreeNode(fi.Name) { ImageIndex = WebResource.GetImageIndexFromExtension(fi.Extension.Remove(0, 1)) }; node.SelectedImageIndex = node.ImageIndex; node.Tag = wr; selectedNode.Nodes.Add(node); selectedNode.Expand(); } if (errorList.Count > 0) { MessageBox.Show("Some file have not been added since their name does not match naming policy\r\n" + string.Join("\r\n", errorList)); } } } tv.TreeViewNodeSorter = new NodeSorter(); tv.Sort(); }