不能't扫描带有空格和$等特殊字符的文件夹

菲霍维

成员
已加入
2019年11月26日
留言内容
7
编程经验
Beginner
你好,

我想扫描应用程序中的驱动器,但无法扫描$ Recyclebin和名称中带有空格的文件夹。

对于这些错误,我找不到任何解决方案,我试图找到NuGet软件包来为我解决此问题。
我正在使用System.IO

Program.cs:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace FileHandler
{
    class Program
    {
        private static void Main(string[] args)
        {
            GetAllFilesFromFolder(@"E:\", true);
        }

        private static List<string> GetAllFilesFromFolder(string root, bool searchSubfolders)
        {
            Queue<string> folders = new Queue<string>();
            List<string> folderCount = new List<string>();
            List<string> files = new List<string>();
            folders.Enqueue(root);
            while (folders.Count != 0){
                string currentFolder = folders.Dequeue();
                try {
                    string[] filesInCurrent = Directory.GetFiles(currentFolder, "*.*", System.IO.SearchOption.TopDirectoryOnly);
                    files.AddRange(filesInCurrent);
                }
                catch
                {
                    //Console.WriteLine("Error: " + currentFolder);
                    // Do Nothing
                }
                try{
                    if (searchSubfolders){
                        string[] foldersInCurrent = Directory.GetDirectories(currentFolder, "*.*", System.IO.SearchOption.TopDirectoryOnly);
                        foreach (string _current in foldersInCurrent){
                            folderCount.AddRange(foldersInCurrent);
                            folders.Enqueue(_current);
                        }
                    }
                }
                catch{
                    Console.WriteLine("Error: " + currentFolder);
                    // Do Nothing
                }
            }
            countFiles = files.Count();

            List<string> distinct = folderCount.Distinct().ToList(); //Remove Duplicates from scan
            Console.WriteLine("Number of folders AFTER: " + distinct.Count);
            Console.WriteLine("Number of files is: " + files.Count());
       
            Console.ReadLine();
            return files;
        }
    }
}

非常感谢
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
据我所知,“ $”不是一个特殊字符。我认为您正在运行的问题是特定于回收站的,其中某些子目录是ACL,因此拒绝您访问。如上所述,要进入这些目录,您需要以管理员身份运行。
 

菲霍维

成员
已加入
2019年11月26日
留言内容
7
编程经验
Beginner
据我所知,“ $”不是一个特殊字符。我认为您正在运行的问题是特定于回收站的,其中某些子目录是ACL,因此拒绝您访问。如上所述,要进入这些目录,您需要以管理员身份运行。
是的,那是正确的。我确实忽略了一个事实,即我无法访问子目录。所以当时,虽然我很困惑为什么不花钱(160),但我没有意识到这是允许的事情。
 
最佳 底部