ZloePelme666ko
Новичок
- Сообщения
- 18
- Репутация
- 1
Собственно была поставлена задача: прогружать в базу SQLite3 отчетные данные, которые приходят в формате XML(порядка 150 000 файлов до 100Кб каждый), собранные в ZIP-архив :stars:. с sqlite3.dll и msxml.dll вопросов не возникло. Пробовал распаковывать в папку и перебирать поштучно с последующим удалением - вышло 12 часов на один архив. И долго, и для винта очень вредно. Вот и возник очевидный вопрос: можно ли какими-нибудь средствами читать содержимое файла из архива сразу в переменную, минуя запись на HDD?
Только не кричите что не умею пользоваться поиском - искал . И вот что нашел: http://autoit-script.ru/index.php?PHPSESSID=sheaagdl7e9dvklh4rim7o8i21&topic=11218.0
Там эта функция реализована, даже есть в примере, но когда я произвожу перебор файлов то функция отдает содержимое только первого файла, а содержимое последующих забиты нулями, хотя имя возвращает верное :wall_brake:
Вот мой код под эту UDF:
Собственно 2 вопроса:
1. Если кто видит ошибку здесь - прошу тыкните носом :-[
2. Есть ли какие-нибудь другие средства для достижения моей цели?
Только не кричите что не умею пользоваться поиском - искал . И вот что нашел: http://autoit-script.ru/index.php?PHPSESSID=sheaagdl7e9dvklh4rim7o8i21&topic=11218.0
Там эта функция реализована, даже есть в примере, но когда я произвожу перебор файлов то функция отдает содержимое только первого файла, а содержимое последующих забиты нулями, хотя имя возвращает верное :wall_brake:
Вот мой код под эту UDF:
Код:
#include <uZip.au3>
Global $sPackage = @ScriptDir & '\KM_2000140_2013_09.zip' ;~ Имя архива.
_uZip_Startup()
$Index=0
While 1
If _uZip_GetFileInfo($sPackage, $Index) Then ;в качестве теста получаю окно с информацией по файлу
MsgBox(0,'GetFileInfo', 'Compressed size: ' & @TAB & @TAB & _uZip_GetCompressedSize() & @CRLF & _
'Compression method: ' & @TAB & _uZip_GetCompressionMethod() & @CRLF & _
'CRC32: ' & @TAB & @TAB & @TAB & _uZip_GetCrc32() & @CRLF & _
'External file attributes: ' & @TAB & _uZip_GetExternalFileAttributes() & @CRLF & _
'File name: ' & @TAB & @TAB & _uZip_GetFileName() & @CRLF & _
'IsPassword: ' & @TAB & @TAB & _uZip_GetFlag() & @CRLF & _
'Internal file attributes: ' & @TAB & _uZip_GetInternalFileAttributes() & @CRLF & _
'Size file name: ' & @TAB & @TAB & _uZip_GetSizeFileName() & @CRLF & _
'File date: ' & @TAB & @TAB & _uZip_GetFileDate() & @CRLF & _
'Uncompressed size: ' & @TAB & _uZip_GetUnCompressedSize() & @CRLF & _
'Version needed: ' & @TAB & @TAB & _uZip_GetVersionNeeded())
EndIf
$name = _uZip_GetFileName()
if $name = '' then ExitLoop; уходим из цикла по достижении конца архива
FileDelete($name); удаляем если уже существовал
$data = _uZip_LoadToMemoryEx($sPackage, $name)
FileWrite($name,$data)
$index+=1
WEnd
Собственно 2 вопроса:
1. Если кто видит ошибку здесь - прошу тыкните носом :-[
2. Есть ли какие-нибудь другие средства для достижения моей цели?