2012-04-23 2 views
0

Из того, что я могу сказать, нет способа сказать, было ли падение файлом или папкой.WindowsExplorer Drop Получить файлы и файлы из папок

if (fi.Extension == "") недостаточно, поскольку это соответствует каталогу, а также файлу без расширения.

Единственный способ, которым я нашел, это: .GetFiles() и обработать исключение.

Есть ли лучший способ?

private void ListView0_DragDrop(object sender, DragEventArgs e) 
    { 
     // Can only drop files, so check 
     if (!e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      return; 
     } 

     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 
     FileInfo fileInfo; 

     DirectoryInfo dirInfo; 
     foreach (string str in files) 
     { 
      dirInfo = new DirectoryInfo(str); 
      try 
      { 
       foreach(FileInfo fi in dirInfo.GetFiles()) 
       { 
        Debug.WriteLine("File in dir " + fi.Name); 
       } 
      } 
      catch 
      { 
       fileInfo = new FileInfo(str); 
       Debug.WriteLine("File " + str); 
      } 
     } 

ответ

1

Я хотел бы использовать Directory.Exists и File.Exists перед добавлением попробовать поймать - хотя вы, возможно, потребуется в любом случае попробовать в безопасности на отдельных файлов/директорий (оба этих Exists методов может бросить FileIOException

DirectoryInfo dirInfo; 
foreach (string str in files) 
{ 
    if (Directory.Exists(str)) 
    { 
     dirInfo = new DirectoryInfo(str); 

     foreach(FileInfo fi in dirInfo.GetFiles()) 
     { 
      Debug.WriteLine("File in dir " + fi.Name); 
     } 
    } 
    else if (File.Exists(str)) 
    { 
     fileInfo = new FileInfo(str); 
     Debug.WriteLine("File " + str); 
    } 
} 
+0

. Это работает. +1 Если ничто не сглаживает к концу дня, я буду отмечать как ответ. – Paparazzi

Смежные вопросы