【问题标题】:How to support special characters in dotnet core CreateDirectory to an NFS File Share如何支持 dotnet core CreateDirectory 中的特殊字符到 NFS 文件共享
【发布时间】: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


【解决方案1】:

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

这在 NTFS 上是非法的:

" : \ * / ? |

【讨论】:

  • 据我所知,我正在安装 NFS 共享。我想谈谈从 dotnet core 到 NFS。
【解决方案2】:

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

代码实际上在 Linux 上运行良好。

我尝试了多种语言,但我收到的错误似乎是来自 Windows 的错误,即使文件系统支持,它也根本不支持这些字符。根据What characters are forbidden in Windows and Linux directory names? 的说法,“:”字符有时可以在 NTFS 中使用,所以我想这是唯一可以正确检查文件系统是否支持的字符。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2019-10-12
    • 2011-12-27
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多