yea*_*mok 3 c# recursion replace
我必须创建一个可以钻入特定驱动器的应用程序,读取所有文件名并用下划线替换非法SharePoint字符.我指的非法字符是: ~ # % & * {} / \ | : <> ? - ""
有人可以提供代码链接或代码本身如何做到这一点?我对C#非常陌生,需要我能得到的所有帮助.我已经研究了递归钻取驱动器的代码,但我不知道如何将字符替换和递归循环放在一起.请帮忙!
删除非法字符的建议如下:
您只需将字符集更改为要删除的字符集即可.
如果您已经弄清楚如何递归文件夹,则可以使用以下命令获取每个文件夹中的所有文件:
var files = System.IO.Directory.EnumerateFiles(currentPath);
Run Code Online (Sandbox Code Playgroud)
然后
foreach (string file in files)
{
System.IO.File.Move(file, ConvertFileName(file));
}
Run Code Online (Sandbox Code Playgroud)
您将编写的ConvertFileName方法接受文件名作为字符串,并返回剥离了坏字符的文件名.
请注意,如果您使用的是.NET 3.5,GetFiles()也可以使用.根据MSDN:
EnumerateFiles和GetFiles方法的不同之处如下:当您使用EnumerateFiles时,您可以在返回整个集合之前开始枚举名称集合; 当您使用GetFiles时,您必须等待返回整个名称数组,然后才能访问该数组.因此,当您使用许多文件和目录时,EnumerateFiles可以更高效.
如何递归列出目录
string path = @"c:\dev";
string searchPattern = "*.*";
string[] dirNameArray = Directory.GetDirectories(path, searchPattern, SearchOption.AllDirectories);
// Or, for better performance:
// (but breaks if you don't have access to a sub directory; see 2nd link below)
IEnumerable<string> dirNameEnumeration = Directory.EnumerateDirectories(path, searchPattern, SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)
不是一个真正的答案,但请考虑以下两点:
无论如何,以下字符在文件名中无效,因此您不必担心它们:/\:*?"<>|.
确保您的算法适当地处理重复的名称.例如,My~Project.doc并且My#Project.doc都将重命名为My_Project.doc.
| 归档时间: |
|
| 查看次数: |
2949 次 |
| 最近记录: |