В настоящее время я создаю службу 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();
}
}
Как я могу обойти полученную ошибку? Любая помощь будет оценена!