在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驱动器上。
我希望目录**和?的行为相同。但是,如果我注释掉这些代码行,则会出现错误。
任何人都知道如何在dotnet core 2.2中创建特殊字符词典吗?
我已经尝试过的事情
我尝试使用问号的unicode
Directory.CreateDirectory("Y:/\u003F");
但这会导致相同的错误。
此问题与What characters are forbidden in Windows and Linux directory names?不同,因为: 上面的问题询问Windows和Linux文件目录中的禁止字符是什么。我的问题是当您要从Windows写入linux目录时如何解决这些Windows限制。
答案 0 :(得分:0)
您需要在NFS服务器上使用一个ASCII映射文件(ascii_mappings
)来转换要用来命名文件的字符,以获取NTFS文件系统的合法字符。
这在NTFS上是非法的:
”:<> \ * /?|
答案 1 :(得分:0)
似乎我的问题的答案是:在Windows上运行时不可能。
该代码实际上在Linux上可以正常工作。
我尝试了多种语言,但收到的错误似乎是Windows的错误,即使文件系统支持,Windows也根本不支持这些字符。根据{{3}},“:”字符有时在NTFS中可用,因此我认为这是唯一可以正确检查文件系统是否支持的字符。
希望Windows在将来会获得适当的NFS支持。同时,如果您确实需要这些字符,最好的解决方法是在Linux上简单运行该程序。