尝试获取随机文件,但改为获取System.IO.DirectoryNotFoundException

时间:2018-12-22 03:44:22

标签: c# image exception directory directoryinfo

我是编程新手,所以请不要对我刻薄... 我正在尝试从随机文件夹中获取随机文件,但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文件夹作为路径。

2 个答案:

答案 0 :(得分:1)

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)];

答案 1 :(得分:0)

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

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

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

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