【问题标题】:trying to get random file but getting System.IO.DirectoryNotFoundException instead尝试获取随机文件但获取 System.IO.DirectoryNotFoundException
【发布时间】:2019-05-22 09:41:31
【问题描述】:

我是编程新手,所以请不要对我刻薄... 我正在尝试从随机文件夹中获取随机文件,但 System.IO.DirectoryNotFoundException 不断出现。

我使用了这些答案中的代码

https://stackoverflow.com/a/2533731/10297934

https://stackoverflow.com/a/742690/10297934

这是我的代码。

DirectoryInfo[] subDirs;
DirectoryInfo root;
root = new DirectoryInfo(@"E:\items\");
subDirs = root.GetDirectories();
Random random = new Random();
int directory = random.Next(subDirs.Length);
DirectoryInfo randomDirectory = subDirs[directory];

var files = Directory.GetFiles(randomDirectory.ToString(), "*.jpg");
//this is where i get exception
var pictureToDisplay = files[random.Next(files.Length)];

pbxDateV.Image = Image.FromFile(pictureToDisplay);

这是我得到的例外

System.IO.DirectoryNotFoundException: '找不到路径'C:\Users\erica\source\repos\1\1\bin\Debug\forge'的一部分。'

“forge”确实是“items”中的文件夹名称之一。异常消息每次显示时都会向我显示其他随机文件夹名称,因此代码以某种方式工作,但我不确定为什么选择 bin 文件夹作为路径。

【问题讨论】:

    标签: c# image exception directory directoryinfo


    【解决方案1】:

    您的代码中的问题在下面一行 -

        var files = Directory.GetFiles(randomDirectory.ToString(), "*.jpg");
    

    因为 subDirs 只存储子目录的名称而不是完整路径,所以当上面的行 get 执行时,它会尝试在当前代码工作目录中找到该文件夹​​。因此,您要么使用 randomDirectory.FullName ,要么将 root 附加到 randomdirectory 如下 -

         var files = Directory.GetFiles(randomDirectory.ToString(), "*.jpg");
    

    【讨论】:

    • 您两次显示相同的代码行。您忘记实际进行您描述的更正。
    【解决方案2】:

    randomDirectory.ToString() 不返回完整路径,而是单独返回文件夹名称。所以 Directory.GetFiles 会检查当前工作目录,也就是应用的执行目录。

    您应该改用 DirectoryInfo.FullName。

    var files = Directory.GetFiles(randomDirectory.FullName, "*.jpg");
    //this is where i get exception
    var pictureToDisplay = files[random.Next(files.Length)];
    

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 2022-06-16
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多