我正在尝试编写包含字符串的大量文件。文件必须按字母顺序命名(a,b,c ..)。或者类似1,11,12 13,2,21 ......只要它们按字母顺序排序。
我能想到的一种方法是使用DateTime.Now和毫秒。有没有更好的方法来实现这一目标。
答案 0 :(得分:2)
为了简化操作,您需要确保所有文件名包含相同数量的字符:
DateTime.Now.ToString("yyyyMMdd-HHmmss-fffffff") // "20160126-165224-5464781"
var sequence = 0;
// ...
(++sequence).ToString("0000000000"); // "0000000001"
像这种模式创建的所有文件都将按字母顺序排列。
DateTime
方法将是我的第一选择,因为它是自然进步的,我可以多次运行我的程序而不必担心覆盖任何东西。
答案 1 :(得分:0)
使用整数计数器,然后将数字转换为字符串并替换' 0' ' a',' 1',' b'等
答案 2 :(得分:0)
以下是如何进行alpha排序('a-z','aa-zz'等):
public static void GenerateFileNames(int totalFiles)
{
for (int i = 0; i < totalFiles; i++)
{
Console.WriteLine(GetString(i));
}
}
public static string GetString(int index)
{
if (index < 26)
{
return ((char)('A' + index)).ToString();
}
return GetString(index / 26 - 1) + GetString(index % 26);
}
只需使用文件总数调用GenerateFileNames()
,GetString()
函数将返回以A
开头的文件名,并按字母顺序通过最后一个文件名。
这个答案取自linked question,完美地完成了你所要求的工作。接受的答案还包含另一种完成相同的方法。
如果您想在文件名中使用更多字母(例如'AAAA'),可以使用以下方法获取索引:
public static int GetStartIndex(string letters)
{
int index = 0;
for (int i = letters.Length - 1; i > 0; i--)
{
index += (int)Math.Pow(26, i);
}
return index;
}
GenerateFileNames()
上的重载:
public static void GenerateFileNames(int totalFiles, int startIndex)
{
for (int i = startIndex; i < totalFiles + startIndex; i++)
{
Console.WriteLine(GetString(i));
}
}
您可以致电GenerateFileNames(100, GetStartIndex("AAAA"));
来编写100个已排序的文件,从AAAA
开始。
修改强>
我应该注意,对于比AAAA
长得多的字符串,您可能希望使用long
代替int
,因为是指数。数字迅速增长!此方法应该适用于长度最多为7个字母的文件,并且在转换为long
时应该更高一些。
编辑2:
要按字母顺序对这些文件进行排序,您只需在List
上使用.Sort()
方法:
public static List<string> GenerateSortedFileNames(int totalFiles)
{
List<string> names = new List<string>();
for (int i = 0; i < totalFiles; i++)
{
names.Add(GetString(i));
}
names.Sort();
return names;
}
然后像这样使用它:
List<string> SortedNames = GenerateSortedFileNames(100);
foreach (string fileName in SortedNames)
{
Console.WriteLine(fileName);
}
//Outputs A,AA,AB,AC ... X,Y,Z