Как отличить файл или папку от события перетаскивания в С#?

У меня есть форма, в которую вы перетаскиваете файлы, и мне было интересно, как я могу заставить приложение узнать, являются ли данные файлом или папкой.

Моя первая попытка состояла в том, чтобы искать "." в данных, но затем в некоторых папках есть. в них. Я также попытался выполнить условие File.Exists и Directory.Exists, но затем он ищет только текущий путь приложения, а не где-либо еще.

В любом случае я могу каким-то образом применить .Exists в конкретном каталоге или есть способ проверить, какие типы данных перетаскиваются в форму?

Ответ 1

Учитывая путь в виде строки, вы можете использовать System.IO.File.GetAttributes(string path), чтобы получить перечисление FileAttributes, а затем проверить, установлен ли флаг FileAttributes.Directory.

Чтобы проверить папку в версиях .NET до .NET 4.0, вы должны сделать:

FileAttributes attr = File.GetAttributes(path);
bool isFolder = (attr & FileAttributes.Directory) == FileAttributes.Directory;

В новых версиях вы можете использовать метод HasFlag чтобы получить тот же результат:

bool isFolder = File.GetAttributes(path).HasFlag(FileAttributes.Directory);

Также обратите внимание, что FileAttributes может предоставлять различные другие флаги о файле/папке, такие как:

  • FileAttributes.Directory: путь представляет папку
  • FileAttributes.Hidden: файл скрыт
  • FileAttributes.Compressed: файл сжат
  • FileAttributes.ReadOnly: файл только для чтения
  • FileAttributes.NotContentIndexed: исключен из индексации

и т.п.

Ответ 2

if(Directory.Exists(path))
  // then it is a directory
else
  // then it is a file