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