Служба Windows C # неправильно сжимает папку - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я создаю службу Windows, которая будет использоваться для создания резервных копий журналов. В настоящее время журналы хранятся по пути E:\Logs, и целью является копирование содержимого, отметка времени в новой папке и сжатие. После этого у вас должно быть E:\Logs и E:\Logs_[Timestamp].zip. Почтовый индекс будет перемещен в C: \ Backups \ для последующей обработки. В настоящее время я использую следующее, чтобы попытаться заархивировать папку журнала:

var logDirectory = "E://Logs";
var timeStamp = DateTime.Now.ToString("yyyyMMddHHmm");
var zippedFolder = logDirectory + "_" + timeStamp + ".zip"; 

System.IO.Compression.ZipFile.CreateFromDirectory(logDirectory, zippedFolder); 

Хотя это выглядит для создания папки zip, я получаю сообщение об ошибке Windows cannot open the folder. The Compressed (zipped) Folder E:\Logs_201805161035.zip is invalid.

Для решения любых проблем, связанных с устранением неполадок, служба работает с учетной записью AD, которая имеет достаточный уровень разрешений для выполнения административных задач. Еще одна вещь, которую следует учитывать, - служба запускается, когда ее FileSystemWatcher обнаруживает новую папку zip по пути C:\Aggregate. Поскольку существует множество папок zip, которые добавляются в C:\Aggregate одновременно, FileSystemWatcher создает новую задачу для каждого найденного zip-архива. Вы можете увидеть, как это работает в следующем:

    private void FileFoundInDrops(object sender, FileSystemEventArgs e)
    {          
        var aggregatePath = new DirectoryInfo("C://Aggregate"); 

        if (e.FullPath.Contains(".zip"))
        {
            Task task = Task.Factory.StartNew(() =>
            {
                try
                {
                    var logDirectory = "E://Logs";
                    var timeStamp = DateTime.Now.ToString("yyyyMMddHHmm");
                    var zippedFolder = logDirectory + "_" + timeStamp + ".zip"; 
                    ZipFile.CreateFromDirectory(logDirectory, zippedFolder);                       
                }
                catch (Exception ex)
                {
                    Log.WriteLine(System.DateTime.Now.ToString() + " - ERROR: " + ex);
                }
            });

            task.Dispose();
        }           
    }

Как я могу обойти полученную ошибку? Любая помощь будет оценена!

...