我必须做一个循环来生成一个5随机选取的字符串,然后在该名称下创建一个文本文件,可以说在C://中,我该怎么做?生成名称和在目录中创建文件。我想我必须从ascii代码中选择5个随机数字,然后将它们转换为相应的字符,以便能够将它用作名称。 Idk我会如何将他们转换成角色并与他们组成一串,你能帮我吗?如何在C#中生成随机命名的文本文件?
回答
如果你要创建的文件名youself,把你想要在一个字符串使用,并从挑选角色:
// 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)))
为什么downvote?如果你不解释你认为什么是错的,它不能改善答案。 – Guffa 2015-04-12 09:14:13
查看System.IO.Path类的GetTempFileName和GetRandomFileName方法。
GetRandomFileName创造了一个“保密性强”的文件名,并且是一个更接近你问什么。
GetTempFileName在目录中创建一个唯一的文件名 - 也创建一个名称为零的零字节文件 - 有助于确保其唯一性。这可能更接近你实际需要的东西。
+1正是我刚才要回答的:-) – galaktor 2009-08-13 07:58:17
发现这在谷歌你(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();
}
之后,使用文件流来创建并写入文件。
Path.GetTempFileName()或Path.GetRandomFileName()方法呢?还要考虑到文件系统不是事务性的,两个并行进程可以创建相同的文件名。 TempFileName()应该返回唯一的名称(按规范),所以'可能'你不需要关心,如果临时目录可以适用于你的解决方案。
或者你可以使用一个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();
}
我已经多次使用这种方法。这显然不是所要求的'5字母字符串',但在Windows环境中,似乎没有必要将自己限制为5个字母。这里的好处是,它是'保证'是独一无二的(即使维基百科不同意)。 BTW检查(File.Exists(文件名))是多余的,因为文件名不存在。 – 2009-08-13 08:17:21
那么,你永远不知道 - 如果处理这些文件的另一个工具要求文件名不超过5个字母,那么可能需要这些5个字母的文件名。这将是另一个工具开发者方面的WTF,但是这个要求仍然存在,所以我认为“你可以使用GUID--它们不是5个字符的长度,但仍然”就像在说“或者你可能会以及根本不创建任何文件“ - 都不能解决他的问题:-D – 2009-08-13 09:36:11
,我肯定会用Orens答案去,因为你最终可能会遇到各种非法的文件路径字符 – ThePower 2009-08-13 09:57:38