C# 检查路径区分大小写

C# 检查路径区分大小写,c#,path,case-sensitive,C#,Path,Case Sensitive,我试图将路径转换为规范形式,以便比较它们。我快到了,但我被套管卡住了: 如果路径不区分大小写(即在Windows上),我的最后一步应该是path=path.ToUpper()或ToLower()。在其他系统(如Linux、OSX)上,应跳过最后一步 是否有合适的方法来检测此问题?您必须正确检测代码运行的操作系统。之后,您可以根据操作系统规则决定正确的策略。乍一看,你的方法是正确的。 要确定正在运行的操作系统,请尝试以下代码段 var OS = System.Environment.OSVersi

我试图将路径转换为规范形式,以便比较它们。我快到了,但我被套管卡住了:

如果路径不区分大小写(即在Windows上),我的最后一步应该是path=path.ToUpper()或ToLower()。在其他系统(如Linux、OSX)上,应跳过最后一步


是否有合适的方法来检测此问题?

您必须正确检测代码运行的操作系统。之后,您可以根据操作系统规则决定正确的策略。乍一看,你的方法是正确的。 要确定正在运行的操作系统,请尝试以下代码段

var OS = System.Environment.OSVersion;
var platform = OS.Platform;
var version = OS.Version; // or OS.VersionString
var servicePack = OS.ServicePack;
if(platform=="Unix")
{
...
}
这可以让您确定兼容性。“平台”的结果是根据System.Runtime.InteropServices库中的以下PlatformID枚举生成的

// Summary:
//     Identifies the operating system, or platform, supported by an assembly.
[Serializable]
[ComVisible(true)]
public enum PlatformID
{
    // Summary:
    //     The operating system is Win32s. Win32s is a layer that runs on 16-bit versions
    //     of Windows to provide access to 32-bit applications.
    Win32S = 0,
    //
    // Summary:
    //     The operating system is Windows 95 or Windows 98.
    Win32Windows = 1,
    //
    // Summary:
    //     The operating system is Windows NT or later.
    Win32NT = 2,
    //
    // Summary:
    //     The operating system is Windows CE.
    WinCE = 3,
    //
    // Summary:
    //     The operating system is Unix.
    Unix = 4,
    //
    // Summary:
    //     The development platform is Xbox 360.
    Xbox = 5,
    //
    // Summary:
    //     The operating system is Macintosh.
    MacOSX = 6,
}

如果您知道哪些操作系统区分大小写,您可以使用以下内容进行检查

Environment.OSVersion.Platform

这是一个启用了各种操作系统的枚举。然后,您可以使用此选项检查是否需要对字符串进行标准化处理。这也将检测windows的版本。因此,如果您愿意,您可以简单地检查版本是否为Windows,然后执行外壳操作,否则跳过它

差不多

System.OperatingSystem osInfo = System.Environment.OSVersion;
if(osInfo .Contains("Windows"))
{
  //Do casing
}
else
{
  //skip
}

他不是问这个方法是否正确,而是问如何实现它。这应该是一个评论,而不是一个答案(我知道你没有代表,但张贴评论作为答案将无助于你到达那里)。是的,我正在寻找一种更“向前兼容”,甚至可以与新系统一起工作的东西。不是真的需要当然,这只是一个优雅的问题。。。我会向微软推荐一个“Path.IsCaseSensitive”。这是你应该向Mono推荐的,但我怀疑它是否会被接受,因为这是一个相对简单的方法。微软只为Windows平台开发,Mono处理其他一切。