Как поддерживать специальные символы в ядре dotnet CreateDirectory для общего файлового ресурса NFS - PullRequest
1 голос
/ 04 июля 2019

В 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?

Вещи, которые я уже пробовал

Я пытался использовать юникод вопросительного знака

Directory.CreateDirectory("Y:/\u003F");

Но это приводит к той же ошибке.


Этот вопрос НЕ совпадает с Какие символы запрещены в именах каталогов Windows и Linux? , потому что: Приведенный выше вопрос спрашивает, какие запрещенные символы находятся в каталогах файлов Windows и Linux. Мой вопрос о том, как обойти эти ограничения Windows, когда вы хотите писать в каталог Linux из Windows.

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Похоже, ответ на мой вопрос: невозможно при работе в Windows.

Код на самом деле прекрасно работает в Linux.

Я пробовал на нескольких языках, но полученная ошибка, похоже, является ошибкой Windows, которая вообще не поддерживает эти символы, даже если файловая система поддерживает это.Согласно Какие символы запрещены в именах каталогов Windows и Linux? символ ":" иногда работает в NTFS, поэтому я полагаю, что это единственный символ, который проверяет, поддерживается ли он файловой системой.

Надеюсь, что в будущем Windows получит надлежащую поддержку NFS.Между тем, если вам действительно нужны эти символы, лучшим решением будет просто запустить программу в Linux.

0 голосов
/ 04 июля 2019

Вам нужен файл сопоставления ASCII (ascii_mappings) на вашем NFS-сервере, который переводит символы, которым вы хотите присвоить имена вашим файлам, в допустимые символы для файловой системы NTFS.

Это недопустимо в NTFS:

": <> \ * /? |

...