2013-07-27 56 views
0

希望得到一些关于如何将文件夹中的现有文件名转换为小写的建议。将文件名转换为小写

我觉得一个好的开始是保存列表中的文件名并将它们全部转换为较低的值。

如何将文件夹中的现有文件名替换为小写字母?

List<string> codes = new List<string>(); 
string[]productCodes = Directory.GetFiles(@"C:\Users\Ariang\Desktop\screenshotslowercase\screenshots");   

codes = productCodes.ToList(); 
codes = codes.ConvertAll(t => t.ToLower()); 

回答

6

这应该工作:

foreach (var file in Directory.GetFiles(@"C:\Temp\testrename")) 
{ 
    File.Move(file, file.ToLowerInvariant()); 
} 

的几个注意事项,首先我测试了这一点,它的工作原理,有人用一个临时变量别人提到,但我不需要这样做。

另外,我已经在同一个目录下多次运行了这个操作,并且第二次或第三次都没有发生IOException,所以我认为不需要额外的检查。

但是,我在Windows 8上和针对.Net 4.5,早期版本的Windows或.Net上的东西可能会有所不同。

+0

+1,这个工作是非常简单的。 –

+0

我会使用'ToLowerInvariant()'。如果不这样做,你永远不会知道会发生什么。 –

+0

@StevenLiekens好的一点,更新的答案 – JMK

1

无需列表和所有。从目录中简单的读取文件名,并使用

System.IO.File.Move("oldfilename", "oldfilename".ToLower()); 



string[] files = Directory.GetFiles(dir); 
foreach(string file in files) 
{   
    System.IO.File.Move(file, file.ToLowerInvariant()); 
} 
1

Windows系统在文件名中看不到低位和高位字母之间的差异。这就是为什么你不能像“MyFile” - >“myfile”那样转换。使用两个步骤来代替:

foreach (var file in Directory.GetFiles(@"C:\Temp\testrename")) 
{ 
    var tempName = "." + file.ToLowerInvariant(); 
    File.Move(file, tempName); 
    File.Move(tempName, file.ToLowerInvariant()); 
}