如何在dotnet核心CreateDirectory中将特殊字符支持到NFS文件共享

时间:2019-07-04 15:08:33

标签: 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限制。

2 个答案:

答案 0 :(得分:0)

您需要在NFS服务器上使用一个ASCII映射文件(ascii_mappings)来转换要用来命名文件的字符,以获取NTFS文件系统的合法字符。

这在NTFS上是非法的:

”:<> \ * /?|

答案 1 :(得分:0)

似乎我的问题的答案是:在Windows上运行时不可能。

该代码实际上在Linux上可以正常工作。

我尝试了多种语言,但收到的错误似乎是Windows的错误,即使文件系统支持,Windows也根本不支持这些字符。根据{{​​3}},“:”字符有时在NTFS中可用,因此我认为这是唯一可以正确检查文件系统是否支持的字符。

希望Windows在将来会获得适当的NFS支持。同时,如果您确实需要这些字符,最好的解决方法是在Linux上简单运行该程序。