У меня есть таблица Excel с большим количеством имен ПК. Каждый ПК должен иметь резервную копию, хранящуюся на сервере в ZIP-файлах, которые автоматически генерируются.Как проверить, доступен ли zip-файл?
Когда я запускаю свой код, он проверяет имена ПК, чтобы проверить, есть ли у них резервная копия.
Процесс резервного копирования не идеален, поэтому проблема может быть решена вручную после обнаружения проблемы.
Одна из проблем, которые я не могу обнаружить, заключается в том, что процесс резервного копирования не завершается, а .zip-файл поврежден.
Я хочу написать еще одну функцию для обнаружения поврежденных ZIP-файлов, которые невозможно открыть.
Вот код:
Sub check_for_all_backups()
Dim c As Range
Dim rng As Range
Dim Backup As String
For j = 1 To Worksheets.Count
Set rng = Sheets(j).UsedRange.Cells
For Each c In rng
If ispcname(Left(c, 7)) = True And Right(c, 1) = "$" Then
Dim i
i = 1
Backup = Left(c, 7)
c.Interior.ColorIndex = "0"
File = Dir(BU_Folder_Dir)
Do While File <> ""
isbig = True '|
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject") '|
myBool = False
isnew = False
Backup = Right(Backup, 6)
If InStr(File, Backup) > 0 Then
myBool = True
cfile = Dir(BU_Folder_Dir & Left(c, 7) & "*")
Do While cfile <> ""
ReDim arr(i)
arr(i) = FileDateTime(BU_Folder_Dir & cfile)
ReDim Size(i) '|
Size(i) = BU_Folder_Dir & cfile
fsize = FSO.getfile(Size(i)).Size/1024/1024 'MB
If fsize <= 2048 Then 'is file smaller than 2 GB ?
isbig = False
End If '|
If Now - arr(i) < 30 Then
isnew = True
End If
i = i + 1
cfile = Dir()
Loop
If isbig = True Then '|
If c.Comment Is Nothing Then
c.AddComment ("reduce _mit size." & vbCrLf & ".zip over 2GB & (" & fsize & ")")
End If
ElseIf isbig = False Then
If Not c.Comment Is Nothing Then
c.ClearComments
End If
End If '|
If isnew = False Then
c.Interior.ColorIndex = "6"
ElseIf isnew = True Then
c.Interior.ColorIndex = "35"
End If
Exit Do
End If
File = Dir()
Loop
If Not myBool Then
c.Interior.ColorIndex = "22"
End If
End If
Next c
Next j
Call backup_statistics
End Sub
таблица Excel имеет несколько целей, поэтому знак «$» используется только, чтобы сделать разницу между именами компьютеров и резервным копированием именами в других Subs/функциях. Имена компьютеров идентифицируются с помощью другой функции, которая называется ispcname
. Имя резервного файла .zip всегда содержит имя ПК.
Сценарий имеет доступ только для чтения к папке и zip-файлам.
Проверяются около ~ 1000 почтовых файлов. Их размер может достигать 2 ГБ, поэтому мне нужен какой-то метод, который может проверить, доступны ли файлы без слишком большой обработки.
Одним из вариантов было бы попытаться распаковать его или проверить имена файлов в ZIP на [это Рон де Bruin] (http://www.rondebruin.nl/win/s7/win002.htm). Или посмотрите [этот вопрос] (http://stackoverflow.com/q/25755264/2877364). – cxw
Спасибо за информацию, я начну экспериментировать с этими методами. Я обновил свой вопрос с дополнительной информацией. – Divin3