示例#1
0
 public static async Task <FileSystemDrive> UpdateFolderAsync(FileSystemDrive fileSystemDrive, FileSystemDirectory targetDirectory, IProgress <StorageManagerProgress> progress)
 {
     return(await Task.Run(() => UpdateFolder(fileSystemDrive, targetDirectory)));
 }
示例#2
0
 private static FileSystemDrive UpdateFolder(FileSystemDrive fileSystemDrive, FileSystemDirectory targetDirectory)
 {
     return(fileSystemDrive);
 }
示例#3
0
            private void ThMain()
            {
                FileSystemDrive fileSystemDrive = new FileSystemDrive();
                var             driveInfoArr    = DriveInfo.GetDrives();
                DriveInfo       driveInfo       = null;

                TaskIsRunning = true;

                try
                {
                    foreach (DriveInfo di in driveInfoArr)
                    {
                        if (di.Name == _driveName)
                        {
                            driveInfo = di;
                            break;
                        }
                    }

                    if (driveInfo != null)
                    {
                        fileSystemDrive.VolumeLabel = driveInfo.VolumeLabel;
                        fileSystemDrive.DriveLetter = driveInfo.Name;
                        fileSystemDrive.DriveType   = driveInfo.DriveType;
                        fileSystemDrive.FreeSpace   = driveInfo.AvailableFreeSpace;
                        fileSystemDrive.TotalSpace  = driveInfo.TotalSize;
                    }
                    else
                    {
                        fileSystemDrive = null;
                    }
                }
                catch
                {
                    fileSystemDrive = null;
                }

                if (fileSystemDrive != null)
                {
                    DirectoryInfo rootDir = driveInfo.RootDirectory;
                    fileSystemDrive.RootFileList  = new List <FileSystemFile>();
                    fileSystemDrive.DirectoryList = new List <FileSystemDirectory>();

                    foreach (FileInfo file in rootDir.GetFiles())
                    {
                        fileSystemDrive.RootFileList.Add(new FileSystemFile
                        {
                            CreateDate     = file.CreationTime,
                            FileSize       = file.Length,
                            FileAttributes = file.Attributes,
                            ModifiedDate   = file.LastWriteTime,
                            Name           = file.Name,
                            FullName       = fileSystemDrive.DriveLetter + file.Name
                        });
                    }

                    //Set progress data
                    _maxProgress = GetDirectoryCount(rootDir, 0, 2);

                    var rootDirectories      = rootDir.GetDirectories();
                    var rootDirectoriesQueue = new Queue <DirectoryInfo>(rootDirectories);
                    var awaitTasksList       = new List <Task>();

                    while (rootDirectoriesQueue.Count > 0)
                    {
                        if (!_runThMain)
                        {
                            break;
                        }

                        for (int i = 0; i < MAX_THREADS; i++)
                        {
                            if (rootDirectoriesQueue.Count == 0 || awaitTasksList.Count >= MAX_THREADS)
                            {
                                break;
                            }

                            DirectoryInfo dir = rootDirectoriesQueue.Dequeue();
                            Task          t   = Task.Run(() => fileSystemDrive.DirectoryList.Add(GetFileSystemDirectory(dir, 0, 2)));
                            awaitTasksList.Add(t);
                        }

                        while (awaitTasksList.Count >= MAX_THREADS)
                        {
                            Task awaitTask = awaitTasksList.First();
                            awaitTask.Wait();
                            awaitTasksList.Remove(awaitTask);
                        }
                    }

                    Task.WaitAll(awaitTasksList.ToArray());
                }

                progressManualResetEvent.Set();
                if (_fileDataReturnCallback != null)
                {
                    _fileDataReturnCallback.Invoke(fileSystemDrive);
                }

                TaskIsRunning = false;
            }