2016-07-22 8 views
0

У меня есть программа, которая отслеживает изменения в локальной папке с использованием объекта FileSystemWatcher. Проблема в том, что иногда в некоторых средах и ситуациях (я не знаю, какие) этот наблюдатель дает мне событие на пути DOS («/ Hello/How/Are/You» становится чем-то вроде «/ HE ~ 1/HO ~ 1/AR ~ 1/YO ~ 1").Как преобразовать путь DOS в обычный путь (.net)

То, что я ищу, - это способ вернуть этот путь в его полный и нормальный аспект.

Или, по крайней мере, что-то, что может сказать мне, что путь - это путь DOS, поэтому я могу обрабатывать запись по-разному.

EDIT: он должен работать на длинных дорожках (+260 символов), поэтому Path.GetFullPath (sShortPath) не работает для меня здесь!

+0

Вы пробовали 'Path.GetFullPath'? –

ответ

2

Path.GetFullPath (@ "/ HE ~ 1/HO ~ 1/AR ~ 1/YO ~ 1") должен делать то, что вам нужно.

+0

Я собираюсь проверить это, как только смогу! Спасибо за быстрый ответ! – Matthieu

+0

Хорошо, на самом деле это не сработало для меня, потому что мне нужно, чтобы он работал с длинным путем. См. Мой ответ для моего решения! И да, я обновляю свой пост с высокой точностью пути;) – Matthieu

1

Лучший способ зависит то, что вы ищете, если вы просто хотите получить доступ к файлу один раз, то имена 8byte файлов будут работать для ссылок внутренних файлов

если вы хотите отобразить пользователь или хранить то являются 2 вариант

  1. Path содержит большинство инструментов, необходимых для управления путями fullPath = Path.GetFullPath(path1);

  2. FileInfo и DirectoryInfo эти 2 класса обеспечивает постоянный доступ к файлам и информации каталога и в то время как они могут быть созданы с помощью любого действительного пути оба имеет Полное свойство имени, которое обеспечивает доступ к полному пути

+0

Я хотел бы добавить, что число в 8-байтовом пути может меняться со временем (это может быть специфично для версии), поэтому такой короткий пути не должны храниться долгое время, даже если внутренние ссылки на файлы. –

0

Как другие говорили, Path.GetFullPath (sShortPath) отлично работает, если не используется на очень длинных дорожках (+260 символов).

Вот link Я следил за тем, что сработало для меня.

GetLongPathName из kernel32.dll отлично справился со мной, мне просто нужно было изменить ограничение 255 StringBuilder на большее значение, чтобы он работал с длинными путями.