Example #1
0
        public void GetDirectoriesFor2()
        {
            string folder1 = "folder1";
            string folder2 = "folder2";

            this.testFolder.CreateSubdirectory(folder1);
            this.testFolder.CreateSubdirectory(folder2);
            IDirectoryInfo dirInfo = Factory.CreateDirectoryInfo(this.testFolder.FullName);

            Assert.That(dirInfo.GetDirectories().Length, Is.EqualTo(2));
            Assert.That(dirInfo.GetDirectories()[0].Name, Is.EqualTo(folder1));
            Assert.That(dirInfo.GetDirectories()[1].Name, Is.EqualTo(folder2));
        }
        public IDirectoryInfo GetDirectoryInfo(string path)
        {
            var            parts = path.Split('\\');
            IDirectoryInfo dir   = null;

            foreach (var part in parts)
            {
                if (dir == null)
                {
                    if (string.Equals(part, "sdata:", StringComparison.OrdinalIgnoreCase))
                    {
                        dir = _directory;
                    }
                }
                else
                {
                    dir = dir.GetDirectories().FirstOrDefault(item => string.Equals(part, item.Name, StringComparison.OrdinalIgnoreCase));
                }

                if (dir == null)
                {
                    throw new NotSupportedException();
                }
            }

            if (dir == null)
            {
                throw new NotSupportedException();
            }

            return(dir);
        }
Example #3
0
        public override Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase GetDirectory(string path)
        {
            bool isParentPath = string.Equals(path, "..", StringComparison.Ordinal);

            if (isParentPath)
            {
                return(new DirectoryInfoBaseAbstractionAdapter(
                           directory.FileSystem.DirectoryInfo.FromDirectoryName(directory.FileSystem.Path.Combine(directory.FullName, path)),
                           isParentPath));
            }
            else
            {
                IDirectoryInfo[] dirs = directory.GetDirectories(path);

                if (dirs.Length == 1)
                {
                    return(new DirectoryInfoBaseAbstractionAdapter(dirs[0], isParentPath));
                }
                else if (dirs.Length == 0)
                {
                    return(null);
                }
                else
                {
                    // This shouldn't happen. The parameter path isn't supposed to contain wild card.
                    throw new InvalidOperationException(
                              string.Format("More than one sub directories are found under {0} with path {1}.",
                                            directory.FullName, path));
                }
            }
        }
Example #4
0
        private async Task AddDirectoryFilesToTar(TarOutputStream tarArchive, IDirectoryInfo directory)
        {
            if (!string.IsNullOrWhiteSpace(GetRelativePath(directory)))
            {
                var tarEntry = TarEntry.CreateEntryFromFile(directory.FullName);
                tarEntry.Name = GetRelativePath(directory);
                tarArchive.PutNextEntry(tarEntry);
            }

            // Write each file to the tar.

            foreach (var file in directory.GetFiles())
            {
                var tarEntry = TarEntry.CreateEntryFromFile(file.FullName);
                tarEntry.Name = GetRelativePath(file);
                tarEntry.Size = file.Length;

                tarArchive.PutNextEntry(tarEntry);

                using var fileStream = file.OpenRead();
                await fileStream.CopyToAsync(tarArchive);

                tarArchive.CloseEntry();
            }

            foreach (var childDirectory in directory.GetDirectories())
            {
                await AddDirectoryFilesToTar(tarArchive, childDirectory);
            }
        }
Example #5
0
        private static IDirectoryInfo CopyDirectory(IDirectoryInfo source, IDirectoryInfo destination)
        {
            var targetDir = destination.GetDirectories().FirstOrDefault(dir => string.Equals(dir.Name, source.Name, StringComparison.OrdinalIgnoreCase))
                            ?? destination.CreateSubdirectory(source.Name);

            foreach (var sourceFile in source.GetFiles())
            {
                var name       = sourceFile.Name;
                var targetFile = targetDir.GetFiles().FirstOrDefault(item => string.Equals(item.Name, name, StringComparison.OrdinalIgnoreCase))
                                 ?? destination.DriveInfo.GetFileInfo(Path.Combine(targetDir.FullName, name));

                using (var input = sourceFile.Open(FileMode.Open, FileAccess.Read))
                    using (var output = targetFile.Open(FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        input.CopyTo(output);
                    }
            }

            foreach (var subSource in source.GetDirectories())
            {
                CopyDirectory(subSource, targetDir);
            }

            return(targetDir);
        }
Example #6
0
        private static IDirectoryInfo CopyDirectory(IDirectoryInfo source, IDirectoryInfo destination)
        {
            var targetDir = destination.GetDirectories().FirstOrDefault(dir => string.Equals(dir.Name, source.Name, StringComparison.OrdinalIgnoreCase))
                            ?? destination.CreateSubdirectory(source.Name);

            foreach (var sourceFile in source.GetFiles())
            {
                var name = sourceFile.Name;
                var targetFile = targetDir.GetFiles().FirstOrDefault(item => string.Equals(item.Name, name, StringComparison.OrdinalIgnoreCase))
                                 ?? destination.DriveInfo.GetFileInfo(Path.Combine(targetDir.FullName, name));

                using (var input = sourceFile.Open(FileMode.Open, FileAccess.Read))
                using (var output = targetFile.Open(FileMode.OpenOrCreate, FileAccess.Write))
                {
                    input.CopyTo(output);
                }
            }

            foreach (var subSource in source.GetDirectories())
            {
                CopyDirectory(subSource, targetDir);
            }

            return targetDir;
        }
        /// <summary>
        ///     Creates a test directory with the specified name under the TV directory.
        /// </summary>
        /// <param name="parent">
        ///     The parent directory.
        /// </param>
        /// <param name="names">
        ///     The names of the directories to create.
        /// </param>
        /// <returns>
        ///     The directory info.
        /// </returns>
        protected IDirectoryInfo[] CreateTestDirectory(IDirectoryInfo parent, params string[] names)
        {
            var directories = new IDirectoryInfo[names.Length];

            for (var i = 0; i < names.Length; i++)
            {
                var directory = Substitute.For <IDirectoryInfo>();
                directory.Name.Returns(names[i]);
                var fullName = names[i];
                if (parent != null)
                {
                    fullName = parent.FullName + Path.DirectorySeparatorChar + names[i];
                }

                directory.FullName.Returns(fullName);
                directory.Exists.Returns(true);
                directories[i] = directory;
            }

            if (parent != null)
            {
                parent.GetDirectories().Returns(directories);
            }

            return(directories);
        }
Example #8
0
        public static List <IDirectoryInfo> GetAllDirs(IDirectoryInfo dir, List <IDirectoryInfo> dirs = null)
        {
            if (dirs == null)
            {
                dirs = new List <IDirectoryInfo>();
            }

            try
            {
                dirs.Add(dir);
                foreach (var d in dir.GetDirectories())
                {
                    GetAllDirs(d, dirs);
                }
            }
            catch (UnauthorizedAccessException ex)
            {
            }
            catch (Exception ex)
            {
                //generate error
            }


            return(dirs);
        }
Example #9
0
 private void CopySubDirectories(IDirectoryInfo sourceDirectory, IDirectoryInfo destinationDirectory)
 {
     IDirectoryInfo[] subDirectories = sourceDirectory.GetDirectories();
     foreach (IDirectoryInfo subDirectory in subDirectories)
     {
         IDirectoryInfo destSubDirectory = destinationDirectory.CreateSubdirectory(subDirectory.Name);
         CopyDirectory(subDirectory, destSubDirectory);
     }
 }
Example #10
0
        public FolderTree(IDirectoryInfo dir, string name = null)
        {
            this.Name    = name ?? dir.Name;
            this.IsFile  = false;
            this.LocalId = dir.Uuid == null ? null : dir.Uuid.GetValueOrDefault().ToString();
            foreach (var child in dir.GetDirectories())
            {
                this.children.Add(new FolderTree(child));
            }

            this.children.Sort((FolderTree x, FolderTree y) => x.Name.CompareTo(y.Name));
        }
Example #11
0
        private static void SetNormalAttribute(IDirectoryInfo dirInfo)
        {
            foreach (var subDir in dirInfo.GetDirectories())
            {
                SetNormalAttribute(subDir);
            }

            foreach (var file in dirInfo.GetFiles())
            {
                file.Attributes = FileAttributes.Normal;
            }
        }
        private void CopyFiles(IDirectoryInfo source, IDirectoryInfo target)
        {
            foreach (var fi in source.GetFiles())
            {
                fi.CopyTo(this.fileSystem.Path.Combine(target.FullName, fi.Name));
            }

            foreach (var subDirectory in source.GetDirectories())
            {
                var nextTargetSubDir = target.CreateSubdirectory(subDirectory.Name);
                this.CopyFiles(subDirectory, nextTargetSubDir);
            }
        }
        private void CopyDirectoryHelper(IDirectoryInfo source, IDirectoryInfo target)
        {
            // Check if the target directory exists, if not, create it.
            if (!target.Exists)
            {
                try
                {
                    Directory.CreateDirectory(target.FullName);
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("Failed to create directory: {0}.", target.FullName), ex);
                }
            }

            // Copy each file into its new directory.
            IFileInfo[] files = source.GetFiles();
            foreach (IFileInfo file in files)
            {
                // Check if operation was cancelled
                CheckStopped();
                CopyFile(file, new FileInfoWrapper(Path.Combine(target.FullName, file.Name)));
            }

            // Copy each subdirectory using recursion.
            IDirectoryInfo[] subdirectories = source.GetDirectories();
            foreach (IDirectoryInfo sourceSubdirectory in subdirectories)
            {
                // Check if operation was cancelled
                CheckStopped();

                IDirectoryInfo targetSubdirectory =
                    new DirectoryInfoWrapper(Path.Combine(target.FullName, sourceSubdirectory.Name));
                if (!targetSubdirectory.Exists)
                {
                    try
                    {
                        targetSubdirectory.Create();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(
                                  string.Format("Failed to create directory: {0}.", targetSubdirectory.FullName), ex);
                    }
                }
                CopyDirectoryHelper(sourceSubdirectory, targetSubdirectory);
            }
            target.Attributes    = source.Attributes;
            target.LastWriteTime = source.LastWriteTime;
        }
Example #14
0
        internal static long GetDirectorySize(IDirectoryInfo d)
        {
            long ret = 0;

            foreach (var item in d.GetDirectories())
            {
                ret += GetDirectorySize(item);
            }
            foreach (var item in d.GetFiles())
            {
                ret += item.Length;
            }
            return(ret);
        }
Example #15
0
        private IDirectoryInfo GetDirectoryPath(IDirectoryInfo directoryPath, string subDirectory)
        {
            if (string.IsNullOrEmpty(subDirectory))
            {
                return(directoryPath);
            }
            var target = directoryPath.GetDirectories(subDirectory, SearchOption.TopDirectoryOnly).FirstOrDefault();

            if (target == null || !target.Exists)
            {
                target = directoryPath.CreateSubdirectory(subDirectory);
            }
            return(target);
        }
Example #16
0
        /// <summary>
        /// remove a folder if there are no files in it, used by the synchroniser
        /// </summary>
        /// <param name="folder">folder to delete</param>
        /// <param name="whatIf">true to emit all the status updates but not actually perform the deletes, false to do the delete</param>
        public void RemoveFolderIfEmpty(string folder, bool whatIf)
        {
            IDirectoryInfo directoryInfo = _directoryInfoProvider.GetDirectoryInfo(folder);

            if (!directoryInfo.Exists)
            {
                return;
            }

            IDirectoryInfo[] subFolders;
            try
            {
                subFolders = directoryInfo.GetDirectories("*.*");
            }
            catch (DirectoryNotFoundException)
            {
                // if the folder is not there then there is nothing to do
                return;
            }

            if (subFolders != null && subFolders.Length > 0)
            {
                // the folder is not empty - there are subfolders
                return;
            }

            IFileInfo[] files;
            try
            {
                files = directoryInfo.GetFiles("*.*");
            }
            catch (DirectoryNotFoundException)
            {
                // if the folder is not there then there is nothing to do
                return;
            }

            if (files != null && files.Length > 0)
            {
                // the folder is not empty there are files
                return;
            }

            OnStatusUpdate(string.Format(CultureInfo.InvariantCulture, "Removing folder: {0}", directoryInfo.FullName));
            if (!whatIf)
            {
                directoryInfo.Delete();
            }
        }
Example #17
0
        // ******************************************************************************
        /// <summary>
        /// Returns a fully populate heirarchy for this forlder
        /// </summary>
        /// <param name="directoryInfo">Object representing the root folder to scan</param>
        /// <returns>Populated Heirarchy</returns>
        // ******************************************************************************
        CosmosDirItem ScanFolder(IDirectoryInfo directoryInfo, CancellationToken cancelToken)
        {
            CurrentItemLabel = directoryInfo.FullName;
            CosmosDirectoryInfo cosmosDirectoryInfo = (CosmosDirectoryInfo)directoryInfo;
            CosmosDirItem       thisDir             = new CosmosDirItem(directoryInfo.Name, directoryInfo.FullName);

            //thisDir.TotalValue = Math.Max(0, cosmosDirectoryInfo.CosmosSize);
            if (cancelToken.IsCancellationRequested)
            {
                return(thisDir);
            }
            double totalFolderSize = 0;

            try
            {
                // Total up the size of the content
                foreach (var file in directoryInfo.GetFiles())
                {
                    thisDir.AddContent(file.Name, file);
                    var fileSize = Math.Max(0, file.GetValue(CosmosDirectoryInfo.STREAMSIZE));
                    UnitsScannedSoFar += fileSize;
                    totalFolderSize   += fileSize;
                    file.SetValue(CosmosDirectoryInfo.STREAMSIZE, fileSize);
                    if (cancelToken.IsCancellationRequested)
                    {
                        return(thisDir);
                    }
                }

                // recurse into the child directories
                foreach (IDirectoryInfo dir in directoryInfo.GetDirectories())
                {
                    CosmosDirItem newDir = ScanFolder(dir, cancelToken);
                    thisDir.AddChild(newDir);
                }
            }
            catch (UnauthorizedAccessException) { }  // Ignore permissions problems
            catch (Exception e)
            {
#if DEBUG
                Debugger.Break();
#endif
                Debug.WriteLine("Error: " + e.Message);
            }

            //thisDir.TotalValue = totalFolderSize;

            return(thisDir);
        }
Example #18
0
        private void CopyAll(IDirectoryInfo source, IDirectoryInfo destination)
        {
            // copy each file into destination
            foreach (var file in source.GetFiles())
            {
                file.CopyTo(_fileSystem.Path.Combine(destination.FullName, file.Name), true);
            }

            // copy each subdirectory using recursion
            foreach (var diSourceSubDir in source.GetDirectories())
            {
                var nextTargetSubDir = destination.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }
Example #19
0
        public void Init(IDirectoryInfo d)
        {
            if (StartDirectory == null)
            {
                StartDirectory = d;
            }
            Sectors.Clear();
            Text             = "Memory report: " + d.FullName;
            CurrentDirectory = d;
            var list  = Stuff.GetAllFiles(d);
            var total = list.Sum(z => z.Length);

            TotalLen = total;
            var rootl = d.GetFiles().Sum(z => z.Length);

            if (rootl > 0)
            {
                Sectors.Add(new ReportSectorInfo()
                {
                    Name = ".root", Length = rootl, Tag = d, Percentage = (float)rootl / total
                });
            }
            foreach (var item in d.GetDirectories())
            {
                var f = Stuff.GetAllFiles(item);
                var l = f.Sum(z => z.Length);
                Sectors.Add(new ReportSectorInfo()
                {
                    Name       = item.Name,
                    Length     = l,
                    Percentage = (float)l / total,

                    Tag = item
                });
            }
            Sectors = Sectors.OrderByDescending(z => z.Percentage).ToList();

            listView1.Items.Clear();
            foreach (var item in Sectors)
            {
                listView1.Items.Add(new ListViewItem(new string[] { item.Name, Stuff.GetUserFriendlyFileSize(item.Length), (item.Percentage * 100).ToString("F") + "%" })
                {
                    Tag = item
                });
            }
            //listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            //listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }
Example #20
0
        /// <exception cref="FileEntityNotFoundException">Ошибка при получении списка папок</exception>
        public override List <FileSystemEntity> GetDirectories()
        {
            IDirectoryInfo[] directories;
            try {
                directories = info.GetDirectories();
            } catch (DirectoryNotFoundException e) {
                throw new FileEntityNotFoundException("Ошибка при получении списка папок.", e);
            }
            var result = new List <FileSystemEntity>();

            for (var i = 0; i < directories.Length; ++i)
            {
                result.Add(new DirectoryEntity(directories[i]));
            }
            return(result);
        }
Example #21
0
        /// <summary>
        /// Gets the directory info at the specified path.
        /// </summary>
        /// <param name="path">The path of the directory.</param>
        /// <returns>
        /// An <see cref="IDirectoryInfo"/> of the directory from the specified path.
        /// </returns>
        public IDirectoryInfo GetDirectoryInfo(string path)
        {
            path.ThrowIfNull(() => path);

            if (!this.DirectoryExists(path))
            {
                return(ITunesDirectoryInfo
                       .CreateNonExistantDirectoryInfo(Path.GetFileName(path), (ITunesDirectoryInfo)this.GetDirectoryInfo(Path.GetDirectoryName(path))));
            }

            string[] split = path.Split(Path.DirectorySeparatorChar);

            string playlist = split[0];
            string album    = null;

            if (split.Length > 1)
            {
                string artist = split[1];

                if (split.Length > 2)
                {
                    album = split[2];
                }

                var root = this.GetPlaylistStructure(playlist);

                IDirectoryInfo directoryInfo = root
                                               .SingleOrDefault(dir => dir.Name == artist);

                if (directoryInfo == null)
                {
                    directoryInfo = ITunesDirectoryInfo
                                    .CreateNonExistantDirectoryInfo(album ?? artist, (ITunesDirectoryInfo)this.GetDirectoryInfo(Path.GetDirectoryName(path)));
                }

                else if (album != null)
                {
                    directoryInfo = directoryInfo
                                    .GetDirectories()
                                    .Single(albumDir => albumDir.Name == album);
                }

                return(directoryInfo);
            }

            return(new ITunesDirectoryInfo(playlist));
        }
        private void When_getting_directories_it_must_succeed()
        {
            // Arrange
            const string path = @"c:\some\folder";

            IFileSystem fileSystem = new FakeFileSystemBuilder()
                                     .IncludingDirectory(@"c:\some\folder\sub")
                                     .Build();

            IDirectoryInfo dirInfo = fileSystem.ConstructDirectoryInfo(path);

            // Act
            IDirectoryInfo[] infos = dirInfo.GetDirectories();

            // Assert
            infos.Should().ContainSingle(x => x.FullName == @"c:\some\folder\sub");
        }
Example #23
0
        /// <summary>
        ///     Searches for a directory containing a ".git" directory
        ///     up from the current one.
        /// </summary>
        private IDirectoryInfo TryFindGitRepositoryDirectory(string source)
        {
            IDirectoryInfo di = _fileSystem.DirectoryInfo.Create(source);

            do
            {
                bool containsGitFolder = di.GetDirectories(".git", SearchOption.TopDirectoryOnly).Any();
                if (containsGitFolder)
                {
                    break;
                }

                di = di.Parent;
            } while (di != null);

            return(di);
        }
        private void SetDirectory(IDirectoryInfo directoryInfo)
        {
            if (Ignore(directoryInfo))
            {
                return;
            }

            SetFileSystem(directoryInfo);
            SetFileSystem(directoryInfo.GetFileSystemInfos());

            if (!IsRecurse)
            {
                return;
            }

            SetDirectory(directoryInfo.GetDirectories());
        }
Example #25
0
        /// <summary>
        /// Gets the local directory tree.
        /// </summary>
        /// <returns>The local directory tree.</returns>
        /// <param name="parent">Parent directory.</param>
        /// <param name="filter">Filter for files.</param>
        public static IObjectTree <IFileSystemInfo> GetLocalDirectoryTree(IDirectoryInfo parent, IFilterAggregator filter)
        {
            var children = new List <IObjectTree <IFileSystemInfo> >();

            try {
                foreach (var child in parent.GetDirectories())
                {
                    string reason;
                    if (!filter.InvalidFolderNamesFilter.CheckFolderName(child.Name, out reason) && !filter.FolderNamesFilter.CheckFolderName(child.Name, out reason) && !filter.SymlinkFilter.IsSymlink(child, out reason))
                    {
                        children.Add(GetLocalDirectoryTree(child, filter));
                    }
                    else
                    {
                        Logger.Info(reason);
                    }
                }

                foreach (var file in parent.GetFiles())
                {
                    string reason;
                    if (!filter.FileNamesFilter.CheckFile(file.Name, out reason) && !filter.SymlinkFilter.IsSymlink(file, out reason))
                    {
                        children.Add(new ObjectTree <IFileSystemInfo> {
                            Item     = file,
                            Children = new List <IObjectTree <IFileSystemInfo> >()
                        });
                    }
                    else
                    {
                        Logger.Info(reason);
                    }
                }
            } catch (System.IO.PathTooLongException) {
                Logger.Fatal(string.Format("One or more children paths of \"{0}\" are to long to be synchronized, synchronization is impossible since the problem is fixed", parent.FullName));
                throw;
            }

            IObjectTree <IFileSystemInfo> tree = new ObjectTree <IFileSystemInfo> {
                Item     = parent,
                Children = children
            };

            return(tree);
        }
Example #26
0
        private static void AssurePathExists(IDirectoryInfo dirInfo, Queue <string> nameSpaceParts)
        {
            if (!nameSpaceParts.Any())
            {
                return;
            }

            var nextPart       = nameSpaceParts.Dequeue();
            var subDirectories = dirInfo.GetDirectories();
            var nextDirectory  = subDirectories.SingleOrDefault(f => f.Name == nextPart);

            if (nextDirectory == null)
            {
                nextDirectory = dirInfo.CreateSubdirectory(nextPart);
            }

            AssurePathExists(nextDirectory, nameSpaceParts);
        }
Example #27
0
        public void CopyAll(IDirectoryInfo source, IDirectoryInfo target)
        {
            directory.CreateDirectory(target.FullName);

            // Copy each file into the new directory.
            foreach (IFileInfo fi in source.GetFiles())
            {
                fi.CopyTo(path.Combine(target.FullName, fi.Name), true);
            }

            // Copy each subdirectory using recursion.
            foreach (IDirectoryInfo diSourceSubDir in source.GetDirectories())
            {
                IDirectoryInfo nextTargetSubDir =
                    target.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }
Example #28
0
        // ******************************************************************************
        /// <summary>
        /// Returns a fully populate heirarchy for this key
        /// </summary>
        /// <param name="directoryInfo">Object representing the root key to scan</param>
        /// <returns>Populated Heirarchy</returns>
        // ******************************************************************************
        RegistryItem ScanRegistry(IDirectoryInfo registryInfo, CancellationToken cancelToken)
        {
            CurrentItemLabel = registryInfo.FullName;
            RegistryItem thisKey = new RegistryItem(registryInfo.Name, registryInfo.FullName);

            if (cancelToken.IsCancellationRequested)
            {
                return(thisKey);
            }

            try
            {
                //Total up the size of the content
                foreach (var registryItem in registryInfo.GetFiles())
                {
                    thisKey.AddContent(registryItem.Name, registryItem);
                    UnitsScannedSoFar += registryItem.GetValue(RegistryDirectoryInfo.ITEMSIZE);
                    if (cancelToken.IsCancellationRequested)
                    {
                        return(thisKey);
                    }
                }

                // recurse into the sub keys
                foreach (IDirectoryInfo key in registryInfo.GetDirectories())
                {
                    RegistryItem newKey = ScanRegistry(key, cancelToken);
                    thisKey.AddChild(newKey);
                }
            }
            //Ignore permission problems, since if a standare user runs the tool then there
            // will be KEYS that they dont't have access to but we want to skip pass and process
            // the rest of the hive anyways.
            catch (SecurityException) { }
            catch (Exception e)
            {
#if DEBUG
                Debugger.Break();
#endif
                Debug.WriteLine("Error: " + e.Message);
            }

            return(thisKey);
        }
Example #29
0
        public static List <IFileInfo> GetAllFiles(IDirectoryInfo dir, List <IFileInfo> files = null, int?level = null, int?maxlevel = null)
        {
            if (files == null)
            {
                files = new List <IFileInfo>();
            }
            if (level != null && maxlevel != null)
            {
                if (level.Value > maxlevel.Value)
                {
                    return(files);
                }
            }
            try
            {
                if (level != null)
                {
                    level++;
                }
                foreach (var d in dir.GetDirectories())
                {
                    GetAllFiles(d, files, level, maxlevel);
                }
            }
            catch (UnauthorizedAccessException ex)
            {
            }
            catch (Exception ex)
            {
                //generate error
            }

            try
            {
                foreach (var file in dir.GetFiles())
                {
                    files.Add(file);
                }
            }
            catch (Exception ex)
            {
            }
            return(files);
        }
Example #30
0
        private string GetLogDirectory()
        {
            if (_logDirectoryPath == null)
            {
                lock (_logDirectoryPathLock)
                {
                    if (_logDirectoryPath == null)
                    {
                        string         basePath          = _fileSystem.Path.Combine(_dataDirectory.ResolvedPath, InMemoryDirectory);
                        IDirectoryInfo baseDirectoryInfo = _fileSystem.DirectoryInfo.FromDirectoryName(basePath);
                        if (!baseDirectoryInfo.Exists)
                        {
                            baseDirectoryInfo.Create();
                        }

                        IDirectoryInfo[] existingLogDirectories = baseDirectoryInfo.GetDirectories("log*");
                        int existingSuffix = existingLogDirectories.Select(x =>
                        {
                            if (int.TryParse(x.Name.Substring(3), out int suffix))
                            {
                                return(suffix);
                            }

                            return(0);
                        })
                                             .DefaultIfEmpty()
                                             .Max();
                        int    newSuffix        = existingSuffix + 1;
                        string logDirectoryName = $"log{newSuffix:0000}";

                        if (_logger.IsDebug())
                        {
                            LogDebug.CreatingMemoryStoreLogDirectory(_logger, logDirectoryName,
                                                                     baseDirectoryInfo.FullName, null);
                        }
                        IDirectoryInfo logDirectory = baseDirectoryInfo.CreateSubdirectory(logDirectoryName);
                        _logDirectoryPath = logDirectory.FullName;
                    }
                }
            }

            return(_logDirectoryPath);
        }
Example #31
0
        private void ScanSubFoldersForOldFiles(string folderToScan, DateTime oldestEpisodeToKeep, List <IFileInfo> episodesToDelete, PodcastInfo podcastInfo)
        {
            IDirectoryInfo directoryInfo = _directoryInfoProvider.GetDirectoryInfo(folderToScan);

            IDirectoryInfo[] subFolders;
            try
            {
                subFolders = directoryInfo.GetDirectories("*.*");
            }
            catch (DirectoryNotFoundException)
            {
                // if the folder is not there then there is nothing to do
                return;
            }

            foreach (IDirectoryInfo subFolder in subFolders)
            {
                ScanFolderForOldFiles(subFolder.FullName, oldestEpisodeToKeep, episodesToDelete, podcastInfo);
            }
        }
Example #32
0
 bool doesFolderContainAspxFiles(IDirectoryInfo di, int callLevel)
 {
     if (di.Name.ToLower() == "node_modules") return false;
     if (callLevel > 6) return false;
     try {
         if (di.GetFiles("*.aspx").Length > 0) return true;
         foreach (var sdi in di.GetDirectories()) {
             if (doesFolderContainAspxFiles(sdi, callLevel + 1)) return true;
         }
     } catch (PathTooLongException) { }
     return false;
 }
Example #33
0
        public FolderTree(IDirectoryInfo dir, string name = null) {
            this.Name = name ?? dir.Name;
            this.IsFile = false;
            this.LocalId = dir.Uuid == null ? null : dir.Uuid.GetValueOrDefault().ToString();
            foreach (var child in dir.GetDirectories()) {
                this.children.Add(new FolderTree(child));
            }

            this.children.Sort((FolderTree x, FolderTree y) => x.Name.CompareTo(y.Name));
        }
Example #34
0
        /// <summary>
        /// Creates a test directory with the specified name under the TV directory.
        /// </summary>
        /// <param name="parent">
        /// The parent directory.
        /// </param>
        /// <param name="names">
        /// The names of the directories to create.
        /// </param>
        /// <returns>
        /// The directory info.
        /// </returns>
        protected IDirectoryInfo[] CreateTestDirectory(IDirectoryInfo parent, params string[] names)
        {
            var directories = new IDirectoryInfo[names.Length];

            for (int i = 0; i < names.Length; i++)
            {
                var directory = Substitute.For<IDirectoryInfo>();
                directory.Name.Returns(names[i]);
                string fullName = names[i];
                if (parent != null)
                {
                    fullName = parent.FullName + Path.DirectorySeparatorChar + names[i];
                }

                directory.FullName.Returns(fullName);
                directory.Exists.Returns(true);
                directories[i] = directory;
            }

            if (parent != null)
            {
                parent.GetDirectories().Returns(directories);
            }

            return directories;
        }
        /// <summary>
        /// Scans a directory recursively.
        /// </summary>
        /// <param name="rootDirectory">The root directory.</param>
        private void ScanDirectories(IDirectoryInfo rootDirectory)
        {
            if (this.IsStopped) { return; }

            try
            {
                if (rootDirectory.Exists)
                {
                    IEnumerable<IFileInfo> files = rootDirectory.GetFiles();

                    foreach (IFileInfo file in files)
                    {
                        if (this.IsStopped) { return; }

                        if (file.Exists)
                        {
                            this.OnFileFound(new FileFoundEventArgs(file));
                        }
                    }

                    IEnumerable<IDirectoryInfo> directories = rootDirectory.GetDirectories();

                    foreach (IDirectoryInfo directory in directories)
                    {
                        if (this.IsStopped)
                        {
                            return;
                        }

                        if (directory.Name == "$RECYCLE.BIN" || !directory.Exists)
                        {
                            continue;
                        }

                        this.OnDirectoryFound(new DirectoryFoundEventArgs(directory));
                        this.ScanDirectories(directory);
                    }
                }
            }

            // Catch the exceptions and don't handle anything,
            // we want to skip those files or directories
            catch (UnauthorizedAccessException)
            {
            }

            catch (SecurityException)
            {
            }

            catch (IOException)
            {
            }

            this.OnDirectoryProceeded(EventArgs.Empty);
        }
Example #36
0
        /// <summary>
        /// Processes the specified directory looking for episodes.
        /// </summary>
        /// <param name="directory">
        /// The directory to search. 
        /// </param>
        /// <param name="overrideRecurse">
        /// A value indicating whether the setting for recurse subdirectories should be overriden. 
        /// </param>
        /// <param name="ignoreShowUpdate">
        /// A value indicating whether the settings for updating and locked shows should be ignored.
        /// </param>
        /// <returns>
        /// The list of identified files. 
        /// </returns>
        private IEnumerable<FileResult> ProcessDirectory(
            IDirectoryInfo directory, bool overrideRecurse = false, bool ignoreShowUpdate = false)
        {
            // Get the files where the extension is in the list of extensions.
            IEnumerable<IFileInfo> files =
                directory.GetFiles().Where(file => this.settings.FileExtensions.Contains(file.Extension));

            foreach (FileResult result in files.Select(info => this.ProcessFile(info, ignoreShowUpdate)))
            {
                if (result != null)
                {
                    yield return result;
                }
            }

            // If ignore show update is on then this is being run from the FileManger as part
            // of a move or copy operation. It should add to log that it is scanning the directory.
            if (!ignoreShowUpdate)
            {
                Logger.OnLogMessage(this, "Scanned directory: {0}", LogType.Info, directory.FullName.Truncate());
            }

            if (!this.settings.RecurseSubdirectories && !overrideRecurse)
            {
                yield break;
            }

            IDirectoryInfo[] dirs = directory.GetDirectories().Where(d => !d.DirectoryAttributes.HasFlag(FileAttributes.System)
                && !settings.IgnoredDirectories.Contains(d.FullName)).ToArray();
            foreach (FileResult result in
                dirs.SelectMany(dir => this.ProcessDirectory(dir, overrideRecurse, ignoreShowUpdate)))
            {
                yield return result;
            }
        }
Example #37
0
 bool doesFolderContainCssFiles(IDirectoryInfo di)
 {
     if (di.FullName.Contains("\\App_Themes\\Default\\WAF\\")) return false;
     if (di.GetFiles("*.css").Length > 0) return true;
     foreach (var sdi in di.GetDirectories()) {
         if (doesFolderContainCssFiles(sdi)) return true;
     }
     return false;
 }
Example #38
0
 bool doesFolderContainAspxFiles(IDirectoryInfo di)
 {
     if (di.GetFiles("*.aspx").Length > 0) return true;
     foreach (var sdi in di.GetDirectories()) {
         if (doesFolderContainAspxFiles(sdi)) return true;
     }
     return false;
 }
 private void AddDirectoryToZipFile (IDirectoryInfo directoryInfo, ZipOutputStream zipOutputStream, ZipNameTransform nameTransform)
 {
   foreach (var file in directoryInfo.GetFiles ())
     AddFileToZipFile (file, zipOutputStream, nameTransform);
   foreach (var directory in directoryInfo.GetDirectories ())
     AddDirectoryToZipFile (directory, zipOutputStream, nameTransform);
 }
        /// <summary>
        /// Gets the local directory tree.
        /// </summary>
        /// <returns>The local directory tree.</returns>
        /// <param name="parent">Parent directory.</param>
        /// <param name="filter">Filter for files.</param>
        public static IObjectTree<IFileSystemInfo> GetLocalDirectoryTree(IDirectoryInfo parent, IFilterAggregator filter) {
            var children = new List<IObjectTree<IFileSystemInfo>>();
            try {
                foreach (var child in parent.GetDirectories()) {
                    string reason;
                    if (!filter.InvalidFolderNamesFilter.CheckFolderName(child.Name, out reason) && !filter.FolderNamesFilter.CheckFolderName(child.Name, out reason) && !filter.SymlinkFilter.IsSymlink(child, out reason)) {
                        children.Add(GetLocalDirectoryTree(child, filter));
                    } else {
                        Logger.Info(reason);
                    }
                }

                foreach (var file in parent.GetFiles()) {
                    string reason;
                    if (!filter.FileNamesFilter.CheckFile(file.Name, out reason) && !filter.SymlinkFilter.IsSymlink(file, out reason)) {
                        children.Add(new ObjectTree<IFileSystemInfo> {
                            Item = file,
                            Children = new List<IObjectTree<IFileSystemInfo>>()
                        });
                    } else {
                        Logger.Info(reason);
                    }
                }
            } catch (System.IO.PathTooLongException) {
                Logger.Fatal(string.Format("One or more children paths of \"{0}\" are to long to be synchronized, synchronization is impossible since the problem is fixed", parent.FullName));
                throw;
            }

            IObjectTree<IFileSystemInfo> tree = new ObjectTree<IFileSystemInfo> {
                Item = parent,
                Children = children
            };
            return tree;
        }