2015-07-16 4 views
1

У меня есть этот код:Если существует недопустимые файлы, показать MessageBox с их именем

HashSet<string> allowedFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase) 
{ 
     "file1.dll", 
     "file2.dll", 
     "file3.exe" 
}; 

DirectoryInfo directory = new DirectoryInfo(Directory.GetCurrentDirectory()); 
bool containsNonAllowedFiles = directory.EnumerateFiles().Any(file => !allowedFiles.Contains(file.Name)); 

if (containsNonAllowedFiles == true) 
{ 
    Message.Warning("Unallowed files found ! Please remove them."); 
    return; 
} 

Но я хочу, чтобы показать имя файла, который запрещенного, как я могу это сделать?

Например, у меня есть папка с этими файлами: file1.dll, file2.dll, file3.exe, file4.exe. Когда я запускаю приложение, оно должно печатать для меня. Не найденные файлы найдены! Удалите file4.exe и снова запустите приложение. Заранее спасибо

+2

Что делать, если есть большое количество файлов не допускается. Вы хотите показать их все в окне сообщения? – JBond

+0

Я сделаю Найденные файлы не найдены! Удалите: file4.exe, file5.exe, file5.exe и т. Д. Это не проблема, проблема в том, как показать недопустимое имя файла? : D –

ответ

1
 DirectoryInfo directory = new DirectoryInfo(Directory.GetCurrentDirectory()); 
     List<FileInfo> files = directory.GetFiles().ToList(); 
     List<FileInfo> unAllowed = files.FindAll(f => !allowedFiles.Contains(f.Name)); 

     if (unAllowed.Count > 0) 
     { 
      string notAllowedFiles = ""; 
      unAllowed.ForEach(f => notAllowedFiles += f.Name + ","); 
      Message.Warning("Unallowed files found ! Please remove " + notAllowedFiles); 
      return; 
     } 
+0

Большое вам спасибо, это работает;) –

1

Вы можете использовать Where вместо раннего Any:

var nonAllowedFilesNames = directory.EnumerateFiles() 
    .Select(file => file.Name) 
    .Where(fileName => !allowedFiles.Contains(fileName)); 
if(nonAllowedFilesNames.Any()) 
{ 
    string unallowedFiles = String.Join(",", nonAllowedFilesNames); 
    Message.Warning("Unallowed files found ! Please remove: " + unallowedFiles); 
} 
3

Используйте кроме метода из Linq для получения списка недозволенных имен файлов.

var disallowedFiles = directory.EnumerateFiles() 
           .Select(fi => fi.Name) 
           .Except(allowedFiles, StringComparer.OrdinalIgnoreCase) 
           .ToList(); 
+0

Это гораздо лучший ответ, так как он предоставит все необходимые файлы .. +1, – Habib

0

Вы должны получить список недопустимых файлов. Вы можете сделать это следующим образом:

List<String> nonAllowedFiles = directory.EnumerateFiles().FindAll(file => !allowedFiles.Contains(file.Name)); 

, а затем вы можете обработать его так:

foreach (String file in nonAllowedFiles) { 
    Message.Warning("Unallowed files found ! Please remove " + file + " and start app again"); 
} 
return;