2009-08-13 4 views
6

Мне нужно создать цикл для создания 5 случайных символов, а затем создать текстовый файл под этим именем, скажем в C: //, как я это сделаю? И генерация имени, и создание файла в каталоге. Я думаю, что мне нужно выбрать 5 случайных чисел из кодов ascii, чтобы добавить их в массив, а затем преобразовать их в эквиваленты символов, чтобы иметь возможность использовать его в качестве имени. Idk, как я буду преобразовывать их в персонаж и составлять строку с ними, не могли бы вы мне помочь?Как сгенерировать случайный текстовый файл в C#?

+0

Я определенно пойти с Orens ответ, потому что у вас могут быть всевозможные незаконные пути к файлу – ThePower

ответ

6

Если вы хотите создать имена файлов самостоятельно, вы, поставить символы, которые вы хотите использовать в строке и выбрать из этого:

// selected characters 
string chars = "2346789ABCDEFGHJKLMNPQRTUVWXYZabcdefghjkmnpqrtuvwxyz"; 
// create random generator 
Random rnd = new Random(); 
string name; 
do { 
    // create name 
    name = string.Empty; 
    while (name.Length < 5) { 
     name += chars.Substring(rnd.Next(chars.Length), 1); 
    } 
    // add extension 
    name += ".txt"; 
    // check against files in the folder 
} while (File.Exists(Path.Compbine(folderPath, name))) 
+0

Почему downvote? Если вы не объясните, что это такое, что вы считаете неправильным, оно не может улучшить ответ. – Guffa

35

Посмотрите на методы GetTempFileName и GetRandomFileName класса System.IO.Path.

  • GetRandomFileName создает «криптостойкого» имя файла, и чем ближе к тому, что вы просили.

  • GetTempFileName создает уникальное имя файла в каталоге - а также создает файл с нулевым байтом с этим именем - помогая обеспечить его уникальность. Это может быть ближе к тому, что вам действительно нужно.

+0

+1 только то, что я собирался ответить :-) – galaktor

1

Опубликован фрагмент кода, который генерирует случайную строку (букв) here. Код, который создает файлы (также с использованием случайных имен файлов), доступен here.

1

нашел это на Google для вас (source here):

/// <summary> 
/// Generates a random string with the given length 
/// </summary> 
/// <param name="size">Size of the string</param> 
/// <param name="lowerCase">If true, generate lowercase string</param> 
/// <returns>Random string</returns> 
private string RandomString(int size, bool lowerCase) 
{ 
StringBuilder builder = new StringBuilder(); 
Random random = new Random(); 
char ch ; 
for(int i=0; i<size; i++) 
{ 
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))) ; 
builder.Append(ch); 
} 
if(lowerCase) 
return builder.ToString().ToLower(); 
return builder.ToString(); 
} 

После этого, используйте потоки файлов для создания и записи файла.

3

Что касается методов Path.GetTempFileName() или Path.GetRandomFileName()? Рассмотрим также тот факт, что файловая система не является транзакционной, а два параллельных процесса могут создавать одно и то же имя файла. TempFileName() должен возвращать уникальное имя (по спецификации), поэтому «возможно» вам не нужно заботиться об этом, если каталог temp может быть в порядке для вашего решения.

2

Или вы могли бы использовать GUID для создания уникального имени файла:

Википедии:

Хотя каждый генерироваться GUID не гарантированно быть уникальным, общее количество уникальных ключей (2^128 или 3.4 × 10^38) настолько велика, что вероятность того, что одно и то же число генерируется дважды, бесконечно мала.

string text = "Sample..."; 
string path = "D:\\Temp\\"; 

if (!path.EndsWith("\\")) 
    path += "\\"; 

string filename = path + Guid.NewGuid().ToString() + ".txt"; 
while (File.Exists(filename)) 
    filename = path + Guid.NewGuid().ToString() + ".txt"; 

TextWriter writer = null; 
try 
{ 
    writer = new StreamWriter(filename); 
    writer.WriteLine(text); 
    writer.Close(); 
} 
catch (Exception e) 
{ 
    MessageBox.Show("Exception occured: " + e.ToString()); 
} 
finally 
{ 
    if (writer != null) 
     writer.Close(); 
} 
+1

Я использовал этот метод много раз. Очевидно, что это не «строка с 5 буквами», как в запросе, но в среде Windows нет необходимости ограничивать себя 5 буквами. Выгода здесь в том, что она «гарантирована» уникальной (даже если Википедия не согласна). Проверка BTW (File.Exists (filename)) избыточна, поскольку имя файла не будет существовать. –

+2

Ну, вы никогда не знаете - может понадобиться эти 5 буквенных имен файлов, если другой инструмент для обработки этих файлов требует, чтобы имена файлов были не более 5 букв. Это будет WTF на стороне разработчика другого инструмента, но это требование все еще существует, поэтому я, по-моему, говорю: «Вы можете использовать GUID - они не имеют 5 символов в длину, но все равно« походит на высказывание «Или вы можете а также просто не создавать файл вообще »- оба не решают его проблемы: -D –

Смежные вопросы