пытается получить случайный файл, но вместо этого получает System.IO.DirectoryNotFoundException - PullRequest
0 голосов
/ 22 декабря 2018

Я новичок в программировании, поэтому, пожалуйста, не имейте в виду ... Я пытаюсь получить случайный файл из случайной папки, но System.IO.DirectoryNotFoundException продолжает появляться.

Iиспользуемые коды из этих ответов

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 голосов
/ 22 декабря 2018

Проблема в вашем коде находится в строке ниже -

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

Поскольку subDirs хранит только имя подкаталогов, а не полный путь, при выполнении вышеупомянутой строки get пытается найти эту папку в вашем текущем кодерабочий каталог.Так что вы либо используете randomDirectory.FullName, либо добавляете root с randomdirectory, как показано ниже -

     var files = Directory.GetFiles(randomDirectory.ToString(), "*.jpg");
0 голосов
/ 22 декабря 2018

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