Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Копирование файлов (http://forum.oszone.net/showthread.php?t=174747)

AlexM 03-05-2010 14:05 1405723

Копирование файлов
 
Нужно скопировать несколько файлов в один, как в CMD (copy *.* 1.txt). Однако команда FileCopy файлы объединять не хочет. Как проще сделать? Передать строку copy... как аргумент CMD в SHellExecute не получилось...
Спасибо!

madmasles 03-05-2010 14:58 1405749

AlexM,
А так попробуйте:
Код:

RunWait(@ComSpec & " /C COPY *.* 1.txt", "", @SW_HIDE)
Или так:
Код:

#include <File.au3>

$sText = ""
$aFileList = _FileListToArray(@ScriptDir, "*.txt")
If @error = 4 Then
    MsgBox(0, "Ошибка", "Нет файлов *.txt в папке " & @ScriptDir)
    Exit
EndIf

For $i = 1 To UBound($aFileList) - 1
    $hFile = FileOpen(@ScriptDir & "\" & $aFileList[$i], 0)
    $sText &= FileRead($hFile) & @CRLF ;каждый файл будет записан с новой строки.
    FileClose($hFile)
Next
$hFileNew = FileOpen(@ScriptDir & "\Test\test.txt", 10)
FileWrite($hFileNew, $sText)
FileClose($hFileNew)


AlexM 03-05-2010 16:57 1405815

Спасибо, получилось!

madmasles 03-05-2010 21:27 1405952

AlexM,
Только учтите, что в переменную $sText пишется содержание всех файлов, и пишется в память. Если их объем сопоставим с размером хотя бы 60-80% оперативки, то надо применять другой алгоритм.

kaster 03-05-2010 23:38 1406046

madmasles, для такого случая есть несколько вариантов
1. если есть гарантия что каждый файл будет меньше хотя бы 500 мб, то копить не все вместе а записывать каждый файл отдельно.
2. читать побайтово, скажем по мегабайту и записывать

madmasles 03-05-2010 23:43 1406048

kaster,
Абсолютно с Вами согласен. То же и имел в виду.

Второе, то есть читать по 1-10 Мб и записывать, ИМХО, самый оптимальный вариант.


Время: 01:54.

Время: 01:54.
© OSzone.net 2001-