2

我正在构建一个可以部署到 Windows 或 Linux Docker 容器的数据传输工具,该容器必须指示 SQL Server 拍摄数据库快照。此外,SQL Server 可能在 Windows 或 Linux 上,我需要指定.ss 文件在服务器上的位置。我一直在使用Path.GetFilenameWithoutExtension,Path.Combine等,但Path操作是在运行应用程序的操作系统的上下文中完成的。当我与 Windows 上的 SQL Server 实例交谈时,我需要可以在 Linux 中运行的 WindowsPath.Combine 之类的东西。现在我做自己的字符串操作,但Path如果可能的话,我更喜欢使用或专门构建的东西。我知道我正在运行什么操作系统,并且操作系统 SQL Server 正在运行,并且只需要一个与操作系统无关的Path.

4

1 回答 1

1

我认为您需要创建自己的静态函数类来执行 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);
    }
}
于 2019-11-25T22:48:22.187 回答