C# 搜索";。myox“;计算机上的文件

C# 搜索";。myox“;计算机上的文件,c#,windows-applications,C#,Windows Applications,正在尝试为我的公司编写一个小型windows应用程序。我目前遇到的问题是试图在计算机上搜索“.myox”文件(或者说任何文件类型)。下面粘贴的是我编写的代码。我是一个业余程序员,试图开始编写代码。我现在遇到的问题是,下面的代码几乎跳过了计算机上的所有位置,例外情况是“访问被拒绝”。我以管理员的身份运行VS,我也是计算机管理员。不知道我错过了什么,但如果有人能给我指出正确的方向,那将是令人惊讶的 private void FindAllFiles() { int drvCount; int drv

正在尝试为我的公司编写一个小型windows应用程序。我目前遇到的问题是试图在计算机上搜索“.myox”文件(或者说任何文件类型)。下面粘贴的是我编写的代码。我是一个业余程序员,试图开始编写代码。我现在遇到的问题是,下面的代码几乎跳过了计算机上的所有位置,例外情况是“访问被拒绝”。我以管理员的身份运行VS,我也是计算机管理员。不知道我错过了什么,但如果有人能给我指出正确的方向,那将是令人惊讶的

private void FindAllFiles()
{
int drvCount;
int drvSearchCount = 0;
DriveInfo[] allDrives = DriveInfo.GetDrives();
drvCount = allDrives.Count();

foreach (DriveInfo dr in allDrives)
{
  lbAllFiles.Items.Clear();
  drvSearchCount++;

  //removable drives
  if (!dr.IsReady)
  break;

  foreach (string dir in Directory.GetDirectories(dr.ToString()))
  {
    try
    {
      foreach (string files in Directory.GetFiles(dir, "*.myox"))
      {
        lbAllFiles.Items.Add(files);
      }

    }
    catch (Exception Error)
    {

    }
 }

if (drvSearchCount == drvCount)
break;
}

MessageBox.Show("Done searching your computer");
}
提前谢谢。 -Manu

我看到了一些“潜在”问题,并将它们列在下面

首先,您在主(UI)线程上执行此操作,这将阻止整个应用程序,不会给您提供有关当前状态的反馈。您可以使用
Thread
来解决此问题。这个操作的结果将产生另一个问题,即访问
lbAllFiles
,因为(我认为)它是UI的一部分。创建一个
列表
,可以在
FindAllFiles
操作期间填充,然后分配到
lbAllFiles.Items
中,很容易解决这个问题

第二个问题是:

foreach (string files in Directory.GetFiles(dir, "*.myox"))
{
    lbAllFiles.Items.Add(files);
}
Directory.GetFiles(…)
将只返回与您的
模式
参数匹配的文件,因此您只需执行以下操作:

var files = Directory.GetFiles(dir, "*.myox");
if ( files != null && files.Length > 0 )
    lblAllFiles.Items.AddRange(files);
最后,要获得(或检查)权限,您可以
Demand()
权限,正如我在评论中发布的那样:

  foreach (string dir in Directory.GetDirectories(dr.ToString()))
  {
    FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, dir);
    try
    {
        permission.Demand();
        var files = Directory.GetFiles(dir, "*.myox");
        if ( files != null && files.Length > 0 )
            lblAllFiles.Items.AddRange(files);
    }
    catch (Exception Error)
    {

    }
 }
如果这对你有帮助,请告诉我。如果没有,我将尝试用另一种解决方案更新我的答案。

我看到一些“潜在”问题,并将它们列在下面

首先,您在主(UI)线程上执行此操作,这将阻止整个应用程序,不会给您提供有关当前状态的反馈。您可以使用
Thread
来解决此问题。这个操作的结果将产生另一个问题,即访问
lbAllFiles
,因为(我认为)它是UI的一部分。创建一个
列表
,可以在
FindAllFiles
操作期间填充,然后分配到
lbAllFiles.Items
中,很容易解决这个问题

第二个问题是:

foreach (string files in Directory.GetFiles(dir, "*.myox"))
{
    lbAllFiles.Items.Add(files);
}
Directory.GetFiles(…)
将只返回与您的
模式
参数匹配的文件,因此您只需执行以下操作:

var files = Directory.GetFiles(dir, "*.myox");
if ( files != null && files.Length > 0 )
    lblAllFiles.Items.AddRange(files);
最后,要获得(或检查)权限,您可以
Demand()
权限,正如我在评论中发布的那样:

  foreach (string dir in Directory.GetDirectories(dr.ToString()))
  {
    FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, dir);
    try
    {
        permission.Demand();
        var files = Directory.GetFiles(dir, "*.myox");
        if ( files != null && files.Length > 0 )
            lblAllFiles.Items.AddRange(files);
    }
    catch (Exception Error)
    {

    }
 }

如果这对你有帮助,请告诉我。如果没有,我将尝试用另一种解决方案更新我的答案。

我在代码中注意到的一点是,您没有浏览所有目录和子目录。为此,在调用GetDirectories函数时,不仅要发送路径,还要使用枚举器Alldirectories:

foreach (string dir in Directory.GetDirectories(dr.ToString(),System.IO.SearchOption.AllDirectories))

我在代码中注意到的一点是,您没有在所有目录和子目录中导航。为此,在调用GetDirectories函数时,不仅要发送路径,还要使用枚举器Alldirectories:

foreach (string dir in Directory.GetDirectories(dr.ToString(),System.IO.SearchOption.AllDirectories))

您可以尝试
FileIOPermission permission=newfileiopermission(FileIOPermissionAccess.Read,directory);permission.AddPathList(FileIOPermissionAccess.Read,文件);permission.Demand()
您可以尝试
FileIOPermission permission=newfileiopermission(FileIOPermissionAccess.Read,directory);permission.AddPathList(FileIOPermissionAccess.Read,文件);permission.Demand()感谢您的及时回复。不过我现在有个小问题。例如,我在桌面上有一个“.myox”文件,但程序捕捉到一个异常,说“访问路径C\users\all users\microsoft\windows\systemdata被拒绝”,然后它跳转到C\windows文件夹,并且不在users(C\users\Manu\desktop)下查找其他子文件夹这就是文件所在的位置。是否还有其他需要添加的内容?非常感谢您抽出时间回答我的问题。感谢您的及时回复。不过我现在有一个小问题。例如,我的桌面上有一个“.myox”文件,但是程序捕捉到一个异常,说“访问路径C\users\all users\microsoft\windows\systemdata被拒绝”,然后它跳转到C\windows文件夹,并且不在文件所在的用户(C\users\Manu\desktop)下查找其他子文件夹。还有什么需要补充的吗?非常感谢您抽出时间回答我的问题。