Что нового

[Баг] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Вопрос у меня по версии 3.3.4.0.
В 3.3.2.0. для записи в файл новых данных я использовал связку
Код:
FileOpen($file, 2)
FileWrite($file, "Line1")
В изменениях в 3.3.4.0.сказано
-Убрано: Режим чтения "RAW" из FileOpen().
Больше изменений по FileOpen() я не нашел.
Тем не менее я столкнулся с тем, что в 3.3.4.0 и выше при использовании
Код:
FileOpen($file, 2)
FileWrite($file, "Line1")
запись в файл не происходит. Если убрать FileOpen(), то все в порядке - пишет. Столкнулся с этим здесь:
Работа с текстом (сравнить строки в файле)
Как теперь правильно произвести запись в файл?

PS
Может быть я не там, где надо, создал тему. В этом случае, господа модераторы, перенесите ее, пожалуйста туда, где она должна быть.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

Код:
$file = 'Path to the file'
$hFile = FileOpen($file, 2)
FileWrite($hFile, "Line1")

если файл открыт для чтения, то в дальнейшем нужно записывать через хендл, а не через путь


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

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

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

Kaster
Я ничего не понимаю. Специально скачал zip-архив 3.3.4.0 и посмотрел справку по FileOpen():
2 = Write mode (erase previous contents)
по FileWrite():
Remarks
The file must be opened in write mode or the FileWrite command will fail
То есть изменений, по сравнению с предыдущей версией(3.3.2.0) нет. А записывает только через "handle". Почему?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

madmasles [?]
А записывает только через "handle"
не только. просто если открыт файл через FileOpen, то дальнейший доступ к файлу блокируется. только через хендл. либо через функции WinAPI
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

Kaster
Но ведь FileOpen() mode 2 - открыть файл для записи и удалить содержимое. Получается, что 3.3.4.0 сам себе противоречит. Сам открывает файл для записи и сам же его блокирует и не дает ничего записать.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 470
Репутация
2 401
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

madmasles
Не нужно всё усложнять. Файл раньше мог быть открыт и при этом в него можно было писать используя FileWrite("file", ""), теперь это нельзя делать, т.к залатали эту багу (запись в открытый файл без дескриптера).

P.S
Похожая тема уже есть: http://autoit-script.ru/index.php?topic=1048.0
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: [Данные, строки] Работа FileOpen() в версии 3.3.2.0 и 3.3.4.0 и выше.

madmasles [?]
Сам открывает файл для записи и сам же его блокирует и не дает ничего записать
не дает записать напрямую через FileWrite($path) или через любой другой хендл. а через свой же - записать можно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 470
Репутация
2 401
madmasles [?]
информации об этом нет
Есть, просто ту версию я не переводил, оно есть тут (англ.).

И кстати это вроде "исправили" в бете:

Исправлено: Регрессия в FileOpen() которая не позволяла открывать файлы в режиме чтения в том случае если файлы уже были открыты в режиме записи
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
SyDr
Слава Богу! :smile:
 
Верх