Предотвратить IO.GetDirectories () от следующих символических ссылок - PullRequest
3 голосов
/ 25 апреля 2011

При переносе приложения .net в Linux с использованием mono я заметил, что его реализация IO.GetDirectories следует символическим ссылкам в Linux (проблема стала очевидной, когда моя программа достигла /home/clement/svn/obrowser/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib).

Я не могне найдете никакой документации об этом поведении на веб-сайте mono, нигде, кроме крошечного сообщения на форуме.

Знаете ли вы обходной путь, запрещающий IO.GetDirectories переходить по символическим ссылкам?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2011

Вы можете проверить File.GetAttributes , символическая ссылка будет иметь атрибут ReparsePoint, я проверял это с символическими ссылками Windows и на Ubuntu 10.10.

Это не остановит GetDirectories от рекурсивного перечисления, вам придется делать свою собственную рекурсию.

Если вам не нужна межплатформенная поддержка, вы можете посмотреть Mono.Unix.UnixDirectoryInfo .

0 голосов
/ 17 октября 2013

Если вы добавите ссылку на Mono.Posix в свой проект, то следующий код будет проверять, указывает ли путь на символическую ссылку:

Mono.Unix.UnixSymbolicLinkInfo i = new Mono.Unix.UnixSymbolicLinkInfo( path );
if( i.IsSymbolicLink ) ...

, вы также можете проверитьдля других типов файлов (например, Fifo , Socket , BlockDevice и т. д.), используя

switch( i.FileType )
...