【发布时间】:2019-11-15 08:34:10
【问题描述】:
在 ubuntu 中,我创建了一个共享。在 Windows 上,我使用以下方法将此共享安装到 Y:
mount -o nolock \\192.168.2.44/mnt/shared Y:
接下来,我想使用 dotnet core 应用程序在此共享中创建目录。此应用程序应支持 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 限制。
【问题讨论】:
-
我没有在移动设备上测试我,但你可以试试:
Directory.CreateDirectory(@"Y:/?");你确定在你用 c# 做之前,windwos 会让你做这些吗? -
@DenisSchaf 究竟是什么让您认为添加
@会有什么不同?该字符串中没有要转义的字符。 -
纯希望我猜? :D 我的意思是,据我所知,Windows 不会让您在文件夹名称中包含任何字符,例如
” * : < > ? / \ |,所以这可能无论如何都行不通 -
@DenisSchaf 我刚试过,不幸的是它没有用。我有点希望
@"Y:/\u003F"但这当然只会给出一个名为“u003F”的字典。如果我使用 Windows 资源管理器创建字典,那么是的,它不会让我在 Y:/ 中使用这些字符创建文件夹。但我希望 dotnet core 可以做到。它实际上与 : 字符一起使用,所以我不明白为什么其他人不起作用。 -
你为什么不坚持合法的名字?有 * 或 有什么意义?在文件夹名称中?
标签: c# linux windows .net-core nfs