Get full path without filename from path that includes filename
在System.IO.Path中是否有内置的东西只提供文件路径?
例如,如果我有一个string。
@"c:\webserver\public\myCompany\configs\promo.xml",
有什么BCL方法可以给我
"c:\webserver\public\myCompany\configs\"?
- 如何从文件的完整路径获取目录的可能副本?
- fwiw:我已经"放弃"了路径对"路径"的处理,我们使用自己的方法,对UNC(尝试在UNC路径上使用getdirectoryname)和约定(例如trailing/)有更好的期望和一致性。
- 除非文件或目录存在,否则无法知道promo.xml是否用相同的名称指定文件或目录。这可能就是为什么Path.GetDirectoryName()的实现如此简单,只截断最后一段,或者如果有尾随斜杠,则删除尾随斜杠的原因。
Path.GetDirectoryName()…但是您需要知道您传递给它的路径确实包含一个文件名;它只是从路径中删除最后一个位,不管是文件名还是目录名(实际上它不知道是哪个)。
您可以先通过在您的路径上测试File.Exists()和/或Directory.Exists()来验证是否需要调用Path.GetDirectoryName。
- 不需要打电话给File.Exists()。事实上,如果您查找目录名的原因是为了在目录名不存在的情况下创建目录名,那么这样做会适得其反。
- 他的示例显式地记录了一个带有文件名的路径。如果这是他正在测试的路径的模式,并且这些路径表示现有文件,那么检查file.exists()肯定会有用,您是否同意?当然,因为情况可能是另一种情况,所以我只是建议他"可以"使用文件和/或目录上的现有方法;显然,这是适合他的情况的。
- 是的,带有文件名的路径。因为文件名排在第一位,所以没有任何东西可以表明文件存在。
- 正如我所说,这是一个选择,它可能会有所帮助,这取决于对路径的了解。或者根本不需要。但是,在同一路径上测试file.exists()和directory.exists()是一种快速而简单的方法,可以知道存在的路径是文件还是目录。
- 作为一个快速参考,在冗余的问题和"明显"的对待,你需要包括EDOCX1[1]这样才能工作。
1
| Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm")); |
- 这是最好的。记住using System.IO;使用路径方法
Path.GetDirectoryName()返回目录名,因此,对于所需的目录名(带有尾随的反斜线字符),可以调用Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar。
- +1 path.directorysparatorchar很有用
如图所示,使用"getParent()"可以很好地工作。根据需要添加错误检查。
1 2 3
| var fn = openFileDialogSapTable.FileName;
var currentPath = Path.GetFullPath( fn );
currentPath = Directory.GetParent(currentPath).FullName; |
1 2 3 4 5
| string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml";
string currentDirectory = Path.GetDirectoryName(fileAndPath);
string fullPathOnly = Path.GetFullPath(currentDirectory); |
- 请提供一些有关上述代码如何回答问题的信息,以便改进此答案。
- path.getfullpath返回不带文件名的完整路径。
- 显示输出是有帮助的,我不知道最后两行的区别是什么。
我用过这个,它很管用:
1 2 3 4 5 6 7 8 9 10 11 12
| string[] filePaths = Directory.GetFiles(Path.GetDirectoryName(dialog.FileName));
foreach (string file in filePaths)
{
if (comboBox1.SelectedItem.ToString() =="")
{
if (file.Contains("c"))
{
comboBox2.Items.Add(Path.GetFileName(file));
}
}
} |