2009-06-07 82 views
8

动态字符串格式我必须打印出一些项目在工作中的PDF文件。有没有办法提供动态填充,即IE。不使用格式字符串中硬编码的代码。而是基于List的数量。使用string.format和列表<T> .Count()

Ex。

如果我的名单是1000个元素长,我想有这样的:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

如果我的列表是说500个元素长,我想有这样的格式:

Part_001_Filename.pdf ... Part_500_Filename.PDF

这样做的原因是在Windows命令如何文件名。它按字母顺序从左到右或从右到左排序,因此我必须使用前导零,否则文件夹中的排序会混乱。

+0

事实上,资源管理器实际使用天然数字排序,它将按照正确的顺序排序数字,即使没有前导零也是如此。 – Joey 2009-06-07 23:08:14

+1

@Johannes:也许这在Vista/7中是正确的,但我非常肯定它在XP中不能这样工作。我可能是错的,但是我记得当我枚举这些文件时,它们与Explorer显示的顺序不同。 – Chris 2009-06-07 23:58:25

回答

8

最简单的方法可能是建立格式字符串动态过:

static List<string> FormatFileNames(List<string> files) 
{ 
    int width = (files.Count+1).ToString("d").Length; 

    string formatString = "Part_{0:D" + width + "}_{1}.pdf"; 

    List<string> result = new List<string>(); 

    for (int i=0; i < files.Count; i++) 
    { 
     result.Add(string.Format(formatString, i+1, files[i])); 
    } 
    return result; 
} 

这可能与LINQ稍微更简单地完成,如果你喜欢:

static List<string> FormatFileNames(List<string> files) 
{ 
    int width = (files.Count+1).ToString("d").Length;   
    string formatString = "Part_{0:D" + width + "}_{1}.pdf"; 

    return files.Select((file, index) => 
          string.Format(formatString, index+1, file)) 
       .ToList(); 
}