我有一定数量的文件需要我程序中的文件名。文件具有固定的命名方式,即(前缀+数字).jpg。例如:head001.jpg
,head002.jpg
,head003.jpg
等等。
最后的位数可能会有所不同 - 因此程序有变量可以更改文件命名的起始位置,结束位置以及命名中使用的位数。例如:第二种情况可能是 - tail00001.jpg
,tail00002.jpg
,tail00003.jpg
等,直到tail00100.jpg
为止
在这种情况下:起始数字为0,结束数字为100,numDigits为5
在C ++中,我看到这种格式化的完成如下:
format <<prefix<<"%0"<<numDigits<<"d."<<filetype;
//其中format
是stringstream
但是,我不太确定在C#中执行此操作的最佳方法,并且想知道如何解决此问题。
答案 0 :(得分:7)
只需使用string.Format
,精度说明符表示您想要多少位数:
string name = string.Format("tail{0:d6}.jpg", index);
有关详细信息,请参阅standard numeric string formats的MSDN文档。
您当然可以通过编程方式构建字符串格式:
string name = string.Format("tail{0:d" + digits + "}.jpg", index);
或按照Vano的建议使用PadLeft
。您可能仍希望使用string.Format
:
string name = string.Format("tail{0}.jpg",
index.ToString().PadLeft(digits, '0'));
使用PadLeft
的优势在于更改填充值更容易,但我想您无论如何都希望它为0
。
答案 1 :(得分:1)
string有 PadLeft 方法:
int n1 = 1;
string t1 = n1.ToString().PadLeft(5, '0'); // This will return 00001
int n10 = 10;
string t2 = n10.ToString().PadLeft(5, '0'); // This will return 00010 and so on...
答案 2 :(得分:0)
..在这种情况下:起始数字为0,结束数字为100和 numDigits为5
您可以使用String.Format
和decimal format/precision specifier "D"`以及for循环:
int start = 0;
int end = 100;
int numDigits = 5;
string name = "tail";
string extension = ".jpg";
for(int i = start; i <= end; i++)
{
string fileName = string.Format(
"{0}{1}{2}", name, i.ToString("D" + numDigits), extension);
Console.WriteLine(fileName);
}
输出:
tail00000.jpg
tail00001.jpg
tail00002.jpg
tail00003.jpg
tail00004.jpg
tail00005.jpg
tail00006.jpg
tail00007.jpg
tail00008.jpg
tail00009.jpg
tail00010.jpg
....
tail100.jpg
答案 3 :(得分:0)
您可以使用string.Format
执行此操作var result = string.Format("{0}{1:00000}{2}", prefix, number, filetype)
或者你可以使用padleft
var result = prefix + number.ToString().PadLeft('0', numDigits) + "." + extension;
或者你可以混合使用两种:)
答案 4 :(得分:0)
适用于现代 .NET 5.0+(2021 年更新)
int myint = 100;
string zeroPadded = $"{myint:d8}"; // "00000100"
string spacePadded = $"{myint,8}"; // " 100"