Как я могу перечислить содержание .zip папки в c#?

Предупреждение: Деление на ноль

Предупреждающее сообщение «Подразделение на ноль» является одним из наиболее часто задаваемых вопросов среди новых разработчиков PHP. Эта ошибка не вызовет исключения, поэтому некоторые разработчики будут иногда подавлять предупреждение, добавляя оператор подавления ошибок @ перед выражением. Например:

$value = @(2 / 0);

Но, как и при любом предупреждении, наилучшим подходом было бы отслеживать причину предупреждения и разрешать его. Причина предупреждения будет происходить из любого экземпляра, где вы пытаетесь разделить на 0, переменную, равную 0, или переменную, которая не была назначена (поскольку NULL == 0), потому что результат будет «неопределенным».

Чтобы исправить это предупреждение, вы должны переписать свое выражение, чтобы проверить, что значение не равно 0, если оно есть, сделать что-то еще. Если значение равно нулю, вы не должны делиться или изменять значение на 1, а затем делить так, что деление приводит к эквиваленту того, что он разделен только дополнительной переменной.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Вопросы, относящиеся:

29
задан Asadefa 25 January 2019 в 22:02
поделиться

6 ответов

DotNetZip - управление zip-файлом на языках.NET

DotNetZip является небольшой, простой в использовании библиотекой классов для управления .zip файлы. Это может позволить приложениям.NET, записанным в VB.NET, C#, любом языке.NET, легко создать, читать, и zip-файлы обновления.

пример кода для чтения zip:

using (var zip = ZipFile.Read(PathToZipFolder))
{
    int totalEntries = zip.Entries.Count; 
    foreach (ZipEntry e in zip.Entries)
    {
        e.FileName ...
        e.CompressedSize ...
        e.LastModified...
    }
}
33
ответ дан Cheeso 28 November 2019 в 00:39
поделиться

Зарегистрируйтесь SharpZipLib

ZipInputStream inStream = new ZipInputStream(File.OpenRead(fileName));

while (inStream.GetNextEntry())
{

     ZipEntry entry = inStream.GetNextEntry();
     //write out your entry's filename
}
12
ответ дан Frederic 28 November 2019 в 00:39
поделиться

Если Вы используете.Net Платформу 3.0 или позже, проверяете Система. Пространство имен IO.Packaging. Это удалит Вашу зависимость от внешней библиотеки.

Конкретно проверяют Класс .

ZipPackage
21
ответ дан Adrian Clark 28 November 2019 в 00:39
поделиться

Ick - что код с помощью времени выполнения J# отвратителен! И я не соглашаюсь, что это - лучший способ - J# вне поддержки теперь. И это - ОГРОМНОЕ время выполнения, если все, что Вы хотите, является поддержкой ZIP.

Как насчет этого - это использует DotNetZip (Бесплатная, Общедоступная MS лицензия)

using (ZipFile zip = ZipFile.Read(zipfile) )
{
    bool header = true;
    foreach (ZipEntry e in zip)
    {
        if (header)
        {
            System.Console.WriteLine("Zipfile: {0}", zip.Name);
            if ((zip.Comment != null) && (zip.Comment != ""))
                System.Console.WriteLine("Comment: {0}", zip.Comment);

            System.Console.WriteLine("\n{1,-22} {2,9}  {3,5}   {4,9}  {5,3} {6,8} {0}",
                                     "Filename", "Modified", "Size", "Ratio", "Packed", "pw?", "CRC");
            System.Console.WriteLine(new System.String('-', 80));
            header = false;
        }

        System.Console.WriteLine("{1,-22} {2,9} {3,5:F0}%   {4,9}  {5,3} {6:X8} {0}",
                                 e.FileName,
                                 e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"),
                                 e.UncompressedSize,
                                 e.CompressionRatio,
                                 e.CompressedSize,
                                 (e.UsesEncryption) ? "Y" : "N",
                                 e.Crc32);

        if ((e.Comment != null) && (e.Comment != ""))
            System.Console.WriteLine("  Comment: {0}", e.Comment);
    }
}
6
ответ дан Cheeso 28 November 2019 в 00:39
поделиться

Я являюсь относительно новым здесь поэтому, возможно, я не понимаю то, что продолжается.:-) в настоящее время существует 4 ответа на этом потоке, где два лучших ответа были провалены. (Pearcewg и cxfx's) статья, на которую указывает pearcewg, важна, потому что это разъясняет некоторые проблемы лицензирования с SharpZipLib. Мы недавно оценили несколько.Net библиотек сжатия и нашли, что DotNetZip в настоящее время является лучшим aleternative.

Очень краткое изложение:

  • Система. IO.Packaging значительно медленнее, чем DotNetZip.

  • SharpZipLib является GPL - см. статью.

Так для начинающих, я проголосовал за те два ответа.

Kim.

4
ответ дан Kim Major 28 November 2019 в 00:39
поделиться

Лучший способ состоит в том, чтобы использовать.NET, созданную в функциональности zip J#, как показано в MSDN: http://msdn.microsoft.com/en-us/magazine/cc164129.aspx . В этой ссылке существует полный рабочий пример чтения приложения и записи в zip-файлы. Для конкретного примера списка содержания zip-файла (в этом случае Silverlight .xap пакет приложений), код мог быть похожим на это:


ZipFile package = new ZipFile(packagePath);
java.util.Enumeration entries = package.entries();
//We have to use Java enumerators because we
//use java.util.zip for reading the .zip files
while ( entries.hasMoreElements() )
{
    ZipEntry entry = (ZipEntry) entries.nextElement();

    if (!entry.isDirectory())
    {
        string name = entry.getName();
        Console.WriteLine("File: " + name + ", size: " + entry.getSize() + ", compressed size: " + entry.getCompressedSize());
    }
    else
    {
        // Handle directories...
    }                        
}

у Aydsman был правильный указатель, но существует проблемы . А именно, Вы могли бы найти проблемы вводными zip-файлами, но являетесь допустимым решением, если Вы предназначаете к [только 117] создают pacakges. ZipPackage реализует абстрактный класс Пакета и позволяет управление zip-файлами. Существует образец того, как сделать это в MSDN: http://msdn.microsoft.com/en-us/library/ms771414.aspx . Примерно код был бы похож на это:

             string packageRelationshipType = @"http://schemas.microsoft.com/opc/2006/sample/document";
            string resourceRelationshipType = @"http://schemas.microsoft.com/opc/2006/sample/required-resource";
            // Open the Package.
            // ('using' statement insures that 'package' is
            //  closed and disposed when it goes out of scope.)
            foreach (string packagePath in downloadedFiles)
            {
                Logger.Warning("Analyzing " + packagePath);
                using (Package package = Package.Open(packagePath, FileMode.Open, FileAccess.Read))
                {
                    Logger.OutPut("package opened");
                    PackagePart documentPart = null;
                    PackagePart resourcePart = null;

                    // Get the Package Relationships and look for
                    //   the Document part based on the RelationshipType
                    Uri uriDocumentTarget = null;
                    foreach (PackageRelationship relationship in
                        package.GetRelationshipsByType(packageRelationshipType))
                    {
                        // Resolve the Relationship Target Uri
                        //   so the Document Part can be retrieved.
                        uriDocumentTarget = PackUriHelper.ResolvePartUri(
                            new Uri("/", UriKind.Relative), relationship.TargetUri);

                        // Open the Document Part, write the contents to a file.
                        documentPart = package.GetPart(uriDocumentTarget);
                        //ExtractPart(documentPart, targetDirectory);
                        string stringPart = documentPart.Uri.ToString().TrimStart('/');
                        Logger.OutPut("  Got: " + stringPart);
                    }

                    // Get the Document part's Relationships,
                    //   and look for required resources.
                    Uri uriResourceTarget = null;
                    foreach (PackageRelationship relationship in
                        documentPart.GetRelationshipsByType(
                                                resourceRelationshipType))
                    {
                        // Resolve the Relationship Target Uri
                        //   so the Resource Part can be retrieved.
                        uriResourceTarget = PackUriHelper.ResolvePartUri(
                            documentPart.Uri, relationship.TargetUri);

                        // Open the Resource Part and write the contents to a file.
                        resourcePart = package.GetPart(uriResourceTarget);

                        //ExtractPart(resourcePart, targetDirectory);
                        string stringPart = resourcePart.Uri.ToString().TrimStart('/');
                        Logger.OutPut("  Got: " + stringPart);
                    }

                }
            }

лучший способ, кажется, использует J#, как показано в MSDN: http://msdn.microsoft.com/en-us/magazine/cc164129.aspx

существуют указатели на большее количество c# .zip библиотеки с различными лицензиями, как SharpNetZip и DotNetZip в этой статье: , как считать файлы из несжатой zip в c#? . Они могли бы быть неподходящими из-за лицензионных требований.

0
ответ дан Community 28 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: