2015-08-27 2 views
0

Я нашел FileAttributes перечисление немного странно. Например, посмотрите на этих атрибутах:Как отличить архивные файлы от обычных файлов через .NET framework

// 
// Summary: 
//  The file is a candidate for backup or removal. 
Archive = 32, 

// 
// Summary: 
//  The file is compressed. 
Compressed = 2048, 

Хорошо, я создал ZIP архив с некоторым сжатием и надеюсь, что он должен иметь атрибут Compressed, но он имеет Archive вместо которой я думал, что должно быть связан с каким-то системные файлы резервного копирования или smth, подобные этому.

Что мне нужно, чтобы иметь возможность различать все типы архивов от обычных файлов через

FileAttributes attr = File.GetAttributes(sourcePath); 
if (attr.HasFlag(/* ... */)) 
{ 
    //... 
} 

Что я должен делать?

+2

сжатый атрибут предназначен для сжатия NTFS. –

+0

'FileAttributes' - неправильное место для поиска. Это атрибуты, связанные с ** файловой системой **, они не имеют никакого отношения к фактическому содержимому ** ** **. Я не знаю какого-либо метода .NET framework для определения типа содержимого файла, поэтому вам, вероятно, придется искать библиотеку. – nodots

+0

Чтобы добавить к @ DanielA.White, эти сжатые файлы обычно обозначаются синим текстом в проводнике файлов. –

ответ

2

Определение типа должно быть таким же прямым, как сравнение расширений файлов (именно поэтому у нас есть их). например

bool isArchive(string filename) 
{ 
    if (!string.IsNullOrEmpty(filename)) 
    { 
     var lowercaseExt = System.IO.Path.GetExtension(filename).ToLowerInvariant(); 
     return new[]{ ".zip", ".7z", ".rar"/*, ...*/}.Contains(lowercaseExt); 
    } 
    return false; 
} 

Если я файл не следовать этому формату, вы будете иметь, чтобы пойти другой маршрут:

  1. Проверьте первые байты файла наблюдать, если файл следует ожидаемый формат ,
  2. Запустите библиотеку извлечений от файла и поймайте исключения (хотя это, безусловно, подвержено ошибкам и уродливым).
1

Атрибуты файла не имеют никакого отношения к его содержимому. Флаг Archive равен supposed to determine, если файл был изменен с момента последнего резервного копирования.

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