我如何在 .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.GetFilenameWithoutExtension
、Path.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);
}
}
我正在构建一个数据传输工具,可以部署到 Windows 或 Linux Docker 容器,该容器必须指示 SQL 服务器获取数据库快照。此外,SQL 服务器可能在 Windows 或 Linux 上,我需要指定 在服务器上 .ss 文件的位置。我一直在使用 Path.GetFilenameWithoutExtension
、Path.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);
}
}