public AllDirectories DivideDirectories(string startingPath) { var startingDir = new DirectoryInfo(startingPath); // allContent IList<FileSystemInfo> var allContent = GetAllFileSystemObjects(startingDir); var allFiles = allContent.Where(f => !(f.Attributes & FileAttributes.Directory)) .Cast <FileInfo>(); var dirs = allContent.Where(f => (f.Attributes & FileAttributes.Directory)) .Cast <DirectoryInfo>(); var allDirs = new SortedList <DirectoryInfo>(dirs, new FileSystemInfoComparer()); var res = new AllDirectories { DirectoriesWithFiles = new List <string>() }; foreach (var file in allFiles) { var dirName = Path.GetDirectoryName(file.Name); if (allDirs.Remove(dirName)) { // Was removed, so first time this dir name seen. res.DirectoriesWithFiles.Add(dirName); } } // allDirs now just contains directories without files res.DirectoriesWithoutFiles = new List <String>(addDirs.Select(d => d.Name)); }
private string GetPathWithCorrectDirectoryCapitalization(string fullPath) { string[] splitPath = fullPath.Split(Path.DirectorySeparatorChar); string leftHalf = fullPath; string rightHalf = ""; for (int i = splitPath.Length - 1; i > 1; i--) { rightHalf = i == splitPath.Length - 1 ? splitPath[i] : splitPath[i] + Path.DirectorySeparatorChar + rightHalf; int lastSeparator = leftHalf.LastIndexOf(Path.DirectorySeparatorChar); leftHalf = lastSeparator > 0 ? leftHalf.Substring(0, lastSeparator) : leftHalf; if (_directory.Exists(leftHalf)) { leftHalf += Path.DirectorySeparatorChar; leftHalf = _pathField.GetFullPath(leftHalf); string baseDirectory = AllDirectories.First(dir => dir.Equals(leftHalf, StringComparison.OrdinalIgnoreCase)); return(baseDirectory + rightHalf); } } return(fullPath); }
private async Task CreateListsAsync() { var updatedList = await _directoryStorage.GetAllDirectoriesAsync(); if (AllDirectories.SequenceEqual(updatedList) == false) { AllDirectories = updatedList; Directories = new ObservableCollection <Directory>(AllDirectories.ToList()); } }
public void RemoveFile(string path) { var fixedPath = FixPath(path); lock (files) { throwExceptionWhenReadonly(path, fixedPath); if (!AllDirectories.Contains(Path.GetDirectoryName(path))) { throw new DirectoryNotFoundException(); } files.Remove(fixedPath); } }
//If C:\foo exists, ensures that trying to save a file to "C:\FOO\file.txt" instead saves it to "C:\foo\file.txt". private string GetPathWithCorrectDirectoryCapitalization(string fullPath) { string[] splitPath = fullPath.Split(Path.DirectorySeparatorChar); string leftHalf = fullPath; string rightHalf = ""; for (int i = splitPath.Length - 1; i > 1; i--) { rightHalf = i == splitPath.Length - 1 ? splitPath[i] : splitPath[i] + Path.DirectorySeparatorChar + rightHalf; int lastSeparator = leftHalf.LastIndexOf(Path.DirectorySeparatorChar); leftHalf = lastSeparator > 0 ? leftHalf.Substring(0, lastSeparator) : leftHalf; if (Directory.Exists(leftHalf)) { leftHalf = Path.GetFullPath(leftHalf).TrimSlashes(); string baseDirectory = AllDirectories.First(dir => StringOperations.Equals(dir, leftHalf)); return(baseDirectory + Path.DirectorySeparatorChar + rightHalf); } } return(fullPath.TrimSlashes()); }