Я пытаюсь создать 10000 папок в определенном каталоге.У меня есть алгоритм для создания случайных имен для каждой папки.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю этот код, он останавливается с созданием около 21 каталога.MessageBox.Show()
отладка, однако она никогда не появляется.
this.WorkingDir
- это строковое свойство, которое выглядит следующим образом.
"C:\\Users\\Reapism\\Desktop\\Yo\\"
DirectoryInfo directoryInfo;
string dirName; // directory name
const int dirNameLength = 15;
for (int i = 0; i < 10000; i++) {
dirName = GetRandomString(dirNameLength); // generates "unique name"
try {
directoryInfo = Directory.CreateDirectory(this.WorkingDir + dirName);
} catch (Exception e) {
MessageBox.Show($"{i} {dirName} failed. {e.ToString()}");
}
}
// Inserting a breakpoint here yields 21 directories
DirectoryInfo d = new DirectoryInfo(this.WorkingDir);
DirectoryInfo[] directories = d.GetDirectories($"*");
foreach (DirectoryInfo dir in directories) {
try {
Directory.Delete(dir.FullName);
} catch (Exception e) {
throw new FileNotFoundException($"Error deleting the directory!" + e.ToString());
}
}
Интересная вещь - это когда я используюОтладчик, и проходите каждую итерацию цикла for при создании каталогов, он идет дальше, чем каталоги 21 , и, вероятно, проходит до 10 тыс.Это привело бы меня к мысли, что существует предел для создания каталогов за определенное количество времени.
Что беспокоит, так это то, что исключение не выдается, цикл просто прерывается.
Связано ли это с тем, что процессор работает быстрее, чем диск может сообщить или записать новую папку?Если так, как я могу обойти это?Эта функция является временной функцией, и использование Thread.Sleep(50)
, например, не может быть использовано.
EDIT GetRandomString () была проблема.Ниже приведен код неработающего GetRandomString (), как мы можем это исправить.Мы всегда передаем постоянное целое число в его аргумент.Связано ли это с тем, что Random создает такое же начальное число?
/// <summary>
/// Generates a random string that may contain
/// [a-z], [A-Z], and [0-9]. (62 characters.)
/// </summary>
/// <param name="length">The length of the string to generate</param>
/// <returns></returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
private string GetRandomString(int length) {
Random rnd = new Random();
string rndStr = string.Empty;
if (length < 1) {
throw new ArgumentOutOfRangeException("Length must be greater than 0!");
}
for (int i = 0; i < length; i++) {
rndStr += this.charList[rnd.Next(this.charList.Length)];
}
return rndStr;
}
Если вы хотите увидеть, получаете ли вы результаты, аналогичные мне или другим, скопируйте и вставьте код в вашу IDE.Обратите внимание, я использую WPF и CLR v4.0.30319
Использование операторов:
using System;
using System.IO;
using System.Windows.Forms;