Что нового

Как открыть одновременно несколько файлов для записи

A

at

Гость
К примеру получили путь ко всем файлам server.txt при помощи этого скрипта:

Код:
#Include <File.au3>
#Include <Array.au3> 

Dim $Array[1]

_FindFiles('C:', 'server.txt')
_ArrayDisplay($Array) 

Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
            _ArrayAdd($Array, $sRoot & '\' & $FileList[$i])
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc


Далее хочу изменить в них нужную строку.
Вопрос: Как одновременно открыть сразу все найденные файлы для записи?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
at,
Если все эти файлы одинаковые, то, ИМХО, проще изменить один и заменить им все остальные найденные. Если разные, то в цикле перебираете файлы и меняете нужные значения.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Попробуй так:
Код:
#Include <File.au3>

Global $4to = '10.10.1.20' ;Что менять
Global $na4to = '10.10.1.30' ;На что менять

_FindFiles('C:', 'server.txt')

Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем файл
			$Replace = StringRegExpReplace($Read, $4to, $na4to) ;Делаем изменение
			FileDelete($sRoot & '\' & $FileList[$i]) ;Удаляем файл
			FileWrite($sRoot & '\' & $FileList[$i], $Replace) ;На его место записываем измененный файл
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc



Добавлено:
Сообщение автоматически объединено:

или так:
Код:
#Include <File.au3>

Global $4to = '10.10.1.20' ;Что менять
Global $na4to = '10.10.1.30' ;На что менять

_FindFiles('C:', 'server.txt')

Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
			$Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $4to, $na4to) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Zaramot [?]
Очень меня смущают эти строки:
Код:
;...
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Read = FileRead($Open) ;Считываем
;...
:smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Автор
A

at

Гость
Спасибо, Всем за помощь.

Правда запутался я окончательно. Создал новую тему: http://autoit-script.ru/index.php/topic,8240.new.html#new
 
Верх