Что может привести к тому, что файлы, добавляемые в zip-файл, не будут включены в zip-файл?

Я работаю с программой, которая берет большие объемы данных, превращает данные в xml-файлы, затем берет эти xml-файлы и архивирует их для использования в другой программе. Иногда во время процесса архивации один или два xml-файла остаются без внимания. Это довольно редко, раз или два в месяц, но когда это происходит, это большой беспорядок. Я ищу помощь, чтобы выяснить, почему файлы не получают молнии и как предотвратить это. Этот код прост:

public string AddToZip(string outfile, string toCompress)
    {
        if (!File.Exists(toCompress)) throw new FileNotFoundException("Could not find the file to compress", toCompress);


        string dir = Path.GetDirectoryName(outfile);
        if(!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }

        // The program that gets this data can't handle files over 
        // 20 MB, so it splits it up into two or more files if it hits the 
        // limit.
        if (File.Exists(outfile))
        {
            FileInfo tooBig = new FileInfo(outfile);
            int converter = 1024;
            float fileSize = tooBig.Length / converter; //bytes to KB
            fileSize = fileSize / converter;  //KB to MB

            int limit = CommonTypes.Helpers.ConfigHelper.GetConfigEntryInt("zipLimit", "19");
            if (fileSize >= limit)
            {
                outfile = MakeNewName(outfile);
            }
        }

        using (ZipFile zf = new ZipFile(outfile))
        {
            zf.AddFile(toCompress,"");
            zf.Save();
        }

        return outfile;          
    }

В конечном счете, то, что я хочу сделать, — это проверить, не были ли какие-либо xml-файлы добавлены в zip после создания zip-файла, но лучше всего остановить проблему в ее треках. Спасибо за помощь.

3 ответа

  1. Убедитесь, что у вас есть этот код внутри попытки… инструкция catch. Также убедитесь, что если вы сделали это, вы делаете что-то с исключением. Это был бы не первый случай, который имеет этот тип обработки исключений:

    try
    {
         //...
    }
    catch { } 
    

    Учитывая код выше, если у вас есть какие-либо исключения в процессе, вы никогда не заметите.

  2. Трудно судить только по этой функции, вот список вещей, которые могут пойти не так:
    — Файл toCompress может быть удален к моменту zf.AddFile вызывается (но после теста Exists). Проверьте возвращаемое значение или добавьте обработку исключений, чтобы обнаружить это.
    — Zip outFile может быть чуть ниже предела размера, добавление нового файла может заставить его перейти за предел.
    — AddToZip () может вызываться одновременно, что может привести к ошибке добавления.

    Как обрабатывается tocompress файл remove? Я думаю, что добавление блокировки в AddoZip () в области функций также может быть хорошей идеей.

  3. Это может быть вопрос времени. Вы проверяете, не слишком ли велик outfile, прежде чем добавить файл toCompress. То, что вы должны делать, это:

    1. Добавить toCompress в outfile
    2. Проверьте, не слишком ли велик outfile при добавлении файла
    3. Если outfile теперь слишком большой, удалите toCompress, создайте новый outfile, добавьте toCompress в новый outfile.

    Я подозреваю, что у вас иногда есть outfile, который находится чуть ниже предела,но добавление toCompress кладет его. Тогда получающая программа не обрабатывает outfile, потому что она слишком большая.

    Я мог бы быть полностью вне базы, но это что-то проверить.