我正在构建一个可以部署到 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
.
问问题
433 次
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 回答