Что такое ICSharpCode.SharpZipLib.ZipEntry.Flag? - PullRequest
0 голосов
/ 23 ноября 2010

Приведите, пожалуйста, какой-нибудь пример, я гуглил, но не нашел подходящего результата.

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

со специальными символами. Например, в настоящее время я использую

ZipEntry entry = new ZipEntry(file.FullName.Substring(directory.FullName.Length + 1));
                    entry.Flags |= 2048; // enable UTF8 file names

каким должен быть флаг для поддержки имени файла специальных символов ??

Thanx

1 Ответ

3 голосов
/ 23 ноября 2010

Исходный код для этого компонента доступен здесь:

http://www.icsharpcode.net/opensource/sharpziplib/Download.aspx

Если вы загрузите исходный код и просмотрите код для ZipEntry, вы найдете следующие комментарии для свойства Flags.

///
/// Get/Set general purpose bit flag for entry
///
///
/// General purpose bit flag
///
/// Bit 0: If set, indicates the file is encrypted
/// Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating
/// Imploding:
/// Bit 1 if set indicates an 8K sliding dictionary was used.  If clear a 4k dictionary was used
/// Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise
///
/// Deflating:
///   Bit 2    Bit 1
///     0        0       Normal compression was used
///     0        1       Maximum compression was used
///     1        0       Fast compression was used
///     1        1       Super fast compression was used
///
/// Bit 3: If set, the fields crc-32, compressed size
/// and uncompressed size are were not able to be written during zip file creation
/// The correct values are held in a data descriptor immediately following the compressed data.
/// Bit 4: Reserved for use by PKZIP for enhanced deflating
/// Bit 5: If set indicates the file contains compressed patch data
/// Bit 6: If set indicates strong encryption was used.
/// Bit 7-10: Unused or reserved
/// Bit 11: If set the name and comments for this entry are in <a href="http://www.unicode.org">unicode</a>.
/// Bit 12-15: Unused or reserved
///
/// <seealso cref="IsUnicodeText"></seealso>
/// <seealso cref="IsCrypted"></seealso>

Итак, ORing 2048 в Flags, как вы сделали, выглядит правильно. Или вы можете установить свойство IsUnicodeText, которое делает то же самое, но при этом код выглядит немного чище:

entry.IsUnicodeText = true;
...