试图获取随机文件但得到的是 System.IO.DirectoryNotFoundException

trying to get random file but getting System.IO.DirectoryNotFoundException instead

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

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

这是我的代码。

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\bin\Debug\forge'。'

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

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

您应该改用 DirectoryInfo.FullName。

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

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

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

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

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