Что нового

Странность при работе с FileOpen\FileClose

kupog

Новичок
Сообщения
12
Репутация
1
Решил сам проблему, поэтому скорее как инструкция пусть будет. Было:
Код:
While 1
If StringLen($sBuff) > 0 Then
		$hFilemn = FileOpen(@ScriptDir&"\Backup.7z",1)
        FileWrite($hFilemn,$sBuff)
    EndIf

    If StringRegExp($sBuff,'(?-i:_!END!_)',0) = 1 Then
		FileClose($hFilemn)
		ExitLoop
    Endif
WEnd

Получается многократное открытие фаила без закрытия. Закрытие происходит только после получения последней строки при приеме данных и то, только последнего открытого закрытие происходит. Таким образом при вызове 7z для разархивации... Вылетает ошибка, что фаил занят другим процессом, хотя вроде бы он и не занят...
Решение:
Код:
While 1
If StringLen($sBuff) > 0 Then
		$hFilemn = FileOpen(@ScriptDir&"\Backup.7z",1)
        FileWrite($hFilemn,$sBuff)
        FileClose($hFilemn)
    EndIf

    If StringRegExp($sBuff,'(?-i:_!END!_)',0) = 1 Then
		ExitLoop
    Endif
Wend
 
Сообщения
119
Репутация
-6
О, я нашел ответ на свой вопрос, похоже. Если выполнять операции после FileClose, то всё работает?
 
Автор
K

kupog

Новичок
Сообщения
12
Репутация
1
ЭйчЭйч сказал(а):
О, я нашел ответ на свой вопрос, похоже. Если выполнять операции после FileClose, то всё работает?
На каждый FileOpen должен быть FileClose. Если делается какой-то цикл с записями по частям, то даже в этом случае нужной каждый раз делать FileClose. Проблему решил. Было в цикле постоянные FileOpen и только после выхода из цикла FileClose. Из-за этого выпадало в ошибку при обращение 7z, что типа фаил занят (хотя при этом занятости признаков не было, удалялся и т.п.).
 
Сообщения
119
Репутация
-6
Было в цикле постоянные FileOpen и только после выхода из цикла FileClose. Из-за этого выпадало в ошибку при обращение 7z, что типа фаил занят (хотя при этом занятости признаков не было, удалялся и т.п.).
Я узнал то, что требовалось.
OffTopic:
Хотел ссылки сделать на темы, но плюнул со своим говнонетом
 
Верх