从C#中的组件部分构建目录字符串
如果我有许多目录名称作为文字字符串或包含在变量中,那么将这些目录组合在一起以形成完整路径的最简单方法是什么?
我知道
Path.Combine
但这只需要2个字符串参数,我需要一个可以接受任意数量目录参数的解决方案。
例如:
string folder1 =“foo”; string folder2 =“bar”; CreateAPath(“C:”,folder1,folder2,folder1,folder1,folder2,“MyFile.txt”)
有任何想法吗? C#是否支持方法中的无限args?
C#是否支持方法中的无限args?
是的,看看params关键字。 将编写一个只调用Path.Combine适当次数的函数会很容易,就像这样(未经测试):
string CombinePaths(params string[] parts) { string result = String.Empty; foreach (string s in parts) { result = Path.Combine(result, s); } return result; }
LINQ再次救援。 聚合扩展function可用于完成您的需要。 考虑这个例子:
string[] ary = new string[] { "c:\", "Windows", "System" }; string path = ary.Aggregate((aggregation, val) => Path.Combine(aggregation, val)); Console.WriteLine(path); //outputs c:WindowsSystem
我更喜欢使用DirectoryInfo与Directory上的静态方法,因为我认为它是更好的OO设计。 这是一个使用DirectoryInfo +扩展方法的解决方案,我认为使用它非常好:
public static DirectoryInfo Subdirectory(this DirectoryInfo self, params string[] subdirectoryName) { Array.ForEach( subdirectoryName, sn => self = new DirectoryInfo(Path.Combine(self.FullName, sn)) ); return self; }
我不喜欢我正在修改self
的事实,但对于这个简短的方法,我认为它比制作一个新变量更清晰。
但是,呼叫站点弥补了它:
DirectoryInfo di = new DirectoryInfo("C:\") .Subdirectory("Windows") .Subdirectory("System32"); DirectoryInfo di2 = new DirectoryInfo("C:\") .Subdirectory("Windows", "System32");
添加获取FileInfo的方法留作练习(针对另一个SO问题!)。
试试这个:
public static string CreateDirectoryName(string fileName, params string[] folders) { if(folders == null || folders.Length <= 0) { return fileName; } string directory = string.Empty; foreach(string folder in folders) { directory = System.IO.Path.Combine(directory, folder); } directory = System.IO.Path.Combine(directory, fileName); return directory; }
params使它可以附加无限量的字符串。
Path.Combine的目的是确保输入的字符串不以斜杠开头或结尾,并检查是否存在任何无效字符。
上述就是C#学习教程:从C#中的组件部分构建目录字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018435.html