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));
    }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        private async Task CreateListsAsync()
        {
            var updatedList = await _directoryStorage.GetAllDirectoriesAsync();

            if (AllDirectories.SequenceEqual(updatedList) == false)
            {
                AllDirectories = updatedList;
                Directories    = new ObservableCollection <Directory>(AllDirectories.ToList());
            }
        }
Beispiel #4
0
        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());
        }