c# - 如何支持 dotnet core CreateDirectory 中的特殊字符到 NFS 文件共享

标签 c# linux windows .net-core nfs

在 ubuntu 中我创建了一个共享。在 Windows 上,我使用以下方法将此共享安装到 Y:

mount -o nolock\\192.168.2.44/mnt/shared Y:

接下来,我想使用 dotnet 核心应用程序在此共享中创建目录。此应用程序应支持 NFS 共享文件夹支持的任何字符。

static void Main(string[] args)
{
    // works if Y: is NFS 
    Directory.CreateDirectory("Y:/subdir/:"); // works!
    Directory.CreateDirectory("Y:/:"); // works!
    // Directory.CreateDirectory("Y:/**"); // Does not work 
    // Directory.CreateDirectory("Y:/?"); // Does not work
    try
    {
        Directory.CreateDirectory("C:/:"); // NTFS
    } catch (Exception e)
    {
        Console.WriteLine("Not NFS"); // ntfs does not work (as expected)
    }
}

以上代码按预期工作;如果我想创建目录“:”,程序允许在 NFS 共享上创建目录,但不允许在 NTFS 驱动器上创建。

我希望目录 ** 和 ? 的行为相同。但是,如果我注释掉这些代码行,就会出现错误。 enter image description here

有人知道如何在 dotnet core 2.2 中创建特殊字符字典吗?

我已经尝试过的事情

我试过用问号的unicode

Directory.CreateDirectory("Y:/\u003F");

但这会导致同样的错误。


此问题与 What characters are forbidden in Windows and Linux directory names? 不同因为: 上面的问题问的是windows和linux文件目录中禁止使用的字符是什么。我的问题是当你想从 windows 写入 linux 目录时如何绕过这些 windows 限制。

最佳答案

您的 NFS 服务器上需要一个 ASCII 映射文件 (ascii_mappings),该文件将您要用于命名文件的字符转换为 NTFS 文件系统的合法字符。

这在 NTFS 上是非法的:

": < >\*/? |

关于c# - 如何支持 dotnet core CreateDirectory 中的特殊字符到 NFS 文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890675/

相关文章:

linux - 有没有办法在不关闭窗口的情况下退出无模式vi?

linux - sed:只是试图删除一个子字符串

linux - 如何从用户提供的输入中打印偶数

windows - Jenkins 执行 PowerShell 脚本

c++ - GDI - 如何创建和填充位图?

python - PyInstaller 构建的 Windows EXE 因多处理而失败

c# - 如何在不知道级别的情况下获取具有相同名称的所有 XML 节点?

c# - 从 powershell 调用 C# 方法而不提供可选参数

c# - 字典中的组合键;覆盖 GetHashCode()、Equals 等还是使用结构?

c# - Xamarin Studio 代码完成和导航不起作用