如何在C#中生成随机命名的文本文件?

时间:2009-08-13 07:41:00

标签: c# ascii random text-files

我必须创建一个循环来生成一个5个随机选择的字母字符串,然后在该名称下创建一个文本文件,比如在C://中,我该​​怎么做?生成名称和在目录中创建文件。我想我必须从ascii代码中选择5个随机数将它们添加到数组中,然后将它们转换为相应的字符,以便能够将其用作名称。我会如何将它们转换为角色并用它们组成一个字符串,你能帮助我吗?

6 个答案:

答案 0 :(得分:35)

查看System.IO.Path类的GetTempFileName和GetRandomFileName方法。

  • GetRandomFileName创建一个“加密强大”的文件名,并且与您要求的文件名相近。

  • GetTempFileName在目录中创建一个唯一的文件名 - 并且还创建一个具有该名称的零字节文件 - 有助于确保其唯一性。这可能更接近您实际需要的内容。

答案 1 :(得分:7)

如果您想自己创建文件名,请将要使用的字符放在字符串中并从中选择:

// 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)))

答案 2 :(得分:3)

Path.GetTempFileName()或Path.GetRandomFileName()方法怎么样?还要考虑文件系统不是事务性的,两个并行进程可以创建相同的文件名。 TempFileName()应该返回唯一的名称(按规范),所以'也许'如果临时目录对你的解决方案来说没问题,你就不需要关心了。

答案 3 :(得分: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();
}

答案 4 :(得分:1)

生成随机字符串(字母)的一段代码已发布here。创建文件的代码(也使用随机文件名)可用here

答案 5 :(得分:1)

在谷歌上找到了这个(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();
}

之后,使用文件流创建和写入文件。