Показать полную графическую версию : [решено] Копирование файлов
Нужно скопировать несколько файлов в один, как в CMD (copy *.* 1.txt). Однако команда FileCopy файлы объединять не хочет. Как проще сделать? Передать строку copy... как аргумент CMD в SHellExecute не получилось...
Спасибо!
madmasles
03-05-2010, 14:58
AlexM,
А так попробуйте:RunWait (http://www.autoitscript.com/autoit3/docs/functions/RunWait.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@ComSpec) & " /C COPY *.* 1.txt", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_HIDE))
Или так:#include <File.au3>
$sText = ""
$aFileList = _FileListToArray(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir), "*.txt")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) = 4 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(0, "Ошибка", "Нет файлов *.txt в папке " & @ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir))
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aFileList) - 1
$hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\" & $aFileList[$i], 0)
$sText &= FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)($hFile) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) ;каждый файл будет записан с новой строки.
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$hFileNew = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\Test\test.txt", 10)
FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFileNew, $sText)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFileNew)
madmasles
03-05-2010, 21:27
AlexM,
Только учтите, что в переменную $sText пишется содержание всех файлов, и пишется в память. Если их объем сопоставим с размером хотя бы 60-80% оперативки, то надо применять другой алгоритм.
madmasles, для такого случая есть несколько вариантов
1. если есть гарантия что каждый файл будет меньше хотя бы 500 мб, то копить не все вместе а записывать каждый файл отдельно.
2. читать побайтово, скажем по мегабайту и записывать
madmasles
03-05-2010, 23:43
kaster,
Абсолютно с Вами согласен. То же и имел в виду.
Второе, то есть читать по 1-10 Мб и записывать, ИМХО, самый оптимальный вариант.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC