如何尽可能少地努力(使用一些已经存在的设施)转换路径c:\aaa\bbb\..\ccc如何c:\aaa\ccc?
比较.Net中的两个路径以确定它们是否指向同一文件或目录的最佳方法是什么?
如何验证这些是否相同:
c:\Some Dir\SOME FILE.XXX
C:\\\SOME DIR\some file.xxx
Run Code Online (Sandbox Code Playgroud)更好的是:有没有办法验证这些路径指向某个网络驱动器上的同一文件:
h:\Some File.xxx
\\Some Host\Some Share\Some File.xxx
Run Code Online (Sandbox Code Playgroud)更新:
Kent Boogaart正确回答了我的第一个问题; 但我仍然很想知道我的第二个问题是否有关于比较网络驱动器上的文件和目录路径的解决方案.
更新2(我的两个问题的综合答案):
问题1:本地和/或网络文件和目录
c:\Some Dir\SOME FILE.XXX
C:\\\SOME DIR\some file.xxx
Run Code Online (Sandbox Code Playgroud)
答案:用System.IO.Path.GetFullPath例如:
var path1 = Path.GetFullPath(@"c:\Some Dir\SOME FILE.XXX");
var path2 = Path.GetFullPath(@"C:\\\SOME DIR\subdir\..\some file.xxx");
// outputs true
Console.WriteLine("{0} == {1} ? {2}", path1, path2, string.Equals(path1, path2, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
问题2:本地和/或网络文件和目录
答案:使用http://briancaos.wordpress.com/2009/03/05/get-local-path-from-unc-path/上发布的GetPath方法
我有2个DirectoryInfo对象,并想检查它们是否指向同一目录.除了比较他们的全名,还有其他更好的方法吗?请忽略链接的情况.
这就是我所拥有的.
DirectoryInfo di1 = new DirectoryInfo(@"c:\temp");
DirectoryInfo di2 = new DirectoryInfo(@"C:\TEMP");
if (di1.FullName.ToUpperInvariant() == di2.FullName.ToUpperInvariant())
{ // they are the same
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
有谁知道如何检查文件或目录是符号链接,连接点,挂载点还是硬链接?
据我所知,通过检查文件的"ReparsePoint"属性来检测符号链接.通过检查目录中的"ReparsePoint"属性来检测连接点.因此,如果在文件上设置"ReparsePoint"属性,它必须是符号链接,否则如果它在目录上设置,它只能是一个连接点......对吗?
好到目前为止,但我仍然不知道如何检测"挂载点"和"硬链接".谁能告诉我怎么做?
我有一个C#程序正在使用该标准ApplicationSettingsBase来保存其用户设置.这在.NET 3.5下工作正常.并且Upgrade()只要创建了我的程序的新版本,所提供的方法就可以正确地"重新加载"这些设置.
最近,我用.NET 4.0重新编译了程序.我的程序的版本号也增加了.但是,当我运行此版本时,Upgrade()似乎没有检测到任何以前的版本设置,并且不会"重新加载"它们.它开始是空白的.
作为测试,我再次重新编译,回到.NET 3.5.而这一次,该Upgrade()方法又开始了.
有没有办法Upgrade()在切换框架时允许工作?还有其他我想念的东西吗?
这个问题不是关于管理Windows路径名; 我仅将其用作不区分大小写的字符串的特定示例.(如果我现在改变这个例子,那么一大堆评论将毫无意义.)
这可能类似于可能创建不区分大小写的字符串类?,但那里没有很多讨论.此外,我并不真正关心所string享有的紧密语言集成或性能优化System.String.
比方说,我用了很多这些(正常)不区分大小写Windows路径名的(我不是真正关心的实际像路径的很多细节\对/,\\\\是一样的\,file://网址..等).一个简单的包装器可能是:
sealed class WindowsPathname : IEquatable<WindowsPathname> /* TODO: more interfaces from System.String */
{
public WindowsPathname(string path)
{
if (path == null) throw new ArgumentNullException(nameof(path));
Value = path;
}
public string Value { get; }
public override int GetHashCode()
{
return Value.ToUpperInvariant().GetHashCode();
}
public override string ToString()
{
return Value.ToString();
}
public override bool Equals(object obj)
{ …Run Code Online (Sandbox Code Playgroud) 关于C#中文件路径的比较已经存在一个问题.但提供的解决方案意味着我有绝对的路径.任何人都可以建议一个良好的相对路径解决方案或指向我在比较路径时必须注意的事情(在Windows上).
例如:
share/logsshare\logs share/logs\那些字符串意味着相同的路径
我想在c#中比较包含文件路径的两个字符串.
但是,因为在ntfs中默认使用不区分大小写的路径,所以我希望字符串比较以相同的方式不区分大小写.
但是,我似乎无法找到有关ntfs如何实际实现其不区分大小写的任何信息.我想知道的是如何使用ntfs用于文件路径的相同大小写规则对字符串进行不区分大小写的比较.
c# ×7
.net ×5
path ×2
string ×2
.net-4.0 ×1
casing ×1
comparison ×1
directory ×1
filepath ×1
filesystems ×1
ntfs ×1
reparsepoint ×1
windows ×1