我如何在 .NET Core 中操作来自 Linux 应用程序的 Windows 路径,反之亦然?

How can I manipulate Windows paths from a Linux app and vice versa in .NET Core?

我正在构建一个数据传输工具,可以部署到 Windows 或 Linux Docker 容器,该容器必须指示 SQL 服务器获取数据库快照。此外,SQL 服务器可能在 Windows 或 Linux 上,我需要指定 在服务器上 .ss 文件的位置。我一直在使用 Path.GetFilenameWithoutExtensionPath.Combine 等,但是 Path 操作是在 OS 应用程序 运行ning 的上下文中完成的。我需要当我与 Windows 上的 SQL 服务器实例交谈时,我可以在 Linux 中 运行 之类的东西。现在我自己进行字符串操作,但如果可能的话,我更愿意使用 Path 或专门构建的东西。我知道 OS 我在 运行 上,OS SQL 服务器在 运行 上,只需要一个 OS 不可知论者 Path.

我认为您需要创建自己的 class 静态函数来执行 Windows 特定路径操作。 "C:\MyDir\MyFile.ext" 实际上可以是 Linux.

上的文件名

您可以查看 .NET Path 的各种实现,您会发现它只是使用字符串操作:

https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/path.cs

我建议只从您需要的方法开始。例如:

public static class PathHelper
{
    public static string GetWindowsFileNameWithoutExtension(string filePath)
    {
        int backslashIndex = filePath.LastIndexOf('\');
        int dotIndex = filePath.LastIndexOf('.');

        if (backslashIndex >= 0 && dotIndex >= 0 && dotIndex > backslashIndex)
        {
            return filePath.Substring(backslashIndex + 1, dotIndex - backslashIndex - 1);
        }

        if (dotIndex >= 0)
        {
            return filePath.Substring(0, dotIndex);
        }

        return Path.GetFileNameWithoutExtension(filePath);
    }
}