在 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 限制。
最佳答案
您的 NFS 服务器上需要一个 ASCII 映射文件 (ascii_mappings
),该文件将您要用于命名文件的字符转换为 NTFS 文件系统的合法字符。
这在 NTFS 上是非法的:
": < >\*/? |
关于c# - 如何支持 dotnet core CreateDirectory 中的特殊字符到 NFS 文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890675/