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