Проблема с CSV файлами ошибка 5004!!! с TXT читает с CSV не читает - страница 2

 
Aleksey Mavrin:

А как он записывается и читается если у вас 

file_hand == INVALID_HANDLE
 У меня в коде вообще то
file_hand != INVALID_HANDLE
а не
file_hand == INVALID_HANDLE
 
Oleg Arsentev:

Перепробовал все варианты ничего не помогает, флаги

не дали результата, точнее результат есть код работает, он и работал с одним флагом

но ошибка тоже есть, удалил проверку на ошибку открытия, так как это не очень важно в общем то.

Напомню что файл открывается, записывается и читается, но иногда выдаётся ошибка 5004.

Windows 10 (с последними обновлениями)

С каким именем файл создается и в каком месте.

Имя файла без слешей сделайте. Проверку на ошибку лучше оставить.

Флаги не причем здесь.

 
Oleg Arsentev:
 У меня в коде вообще то а не

Там не если равно, а равно инвалидному хендлу. Понятно же что человек сказать хотел. У вас код уходит на Иначе и выдает строку с ошибкой в журнал. Значит можно сделать, что хендл инвалидный.

 
Вполне нормальная ситуация. С ключем FILE_SHARE_WRITE не работал. У меня "писатель" раздает сигналы каждую секунду ( обновляет файл ). Есть несколько "читателей" (  "писателем" файл открыт с ключем FILE_SHARE_READ ). На "читателей" наложены ограничения - читаем не чаще, чем один раз в минуту. При таких условиях раз в час, а то и чаще, "читатели" получают ошибку.
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл типа...
 
Mislaid:
Вполне нормальная ситуация. С ключем FILE_SHARE_WRITE не работал. У меня "писатель" раздает сигналы каждую секунду ( обновляет файл ). Есть несколько "читателей" (  "писателем" файл открыт с ключем FILE_SHARE_READ ). На "читателей" наложены ограничения - читаем не чаще, чем один раз в минуту. При таких условиях раз в час, а то и чаще, "читатели" получают ошибку.

Если писатель один, то он обязательно должен быть с ключом общего чтения. А писатели, если их несколько, должны быть и с ключом общего чтения, и с ключом общей записи. Даже если читатель один, он должен быть с ключом общей записи.

 
Alexey Viktorov:

Если писатель один, то он обязательно должен быть с ключом общего чтения. А писатели, если их несколько, должны быть и с ключом общего чтения, и с ключом общей записи. Даже если читатель один, он должен быть с ключом общей записи.

Если "писатель " открыл файл с ключом общего чтения, то и "читатель" должен сделать так-же.

Если "писатель" открыл файл с ключом общей записи, то и читатель должен поступить так-же - это неожиданно. (Хотя для меня простительно, я никогда не открывал общую запись)

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
 
Mislaid:

Если "писатель " открыл файл с ключом общего чтения, то и "читатель" должен сделать так-же.

Если "писатель" открыл файл с ключом общей записи, то и читатель должен поступить так-же - это неожиданно. (Хотя для меня простительно, я никогда не открывал общую запись)

Нет. Ключи общего доступа говорят о том, что открыв файл оставляем возможность другим приложениям этот файл использовать. А вот как использовать читать или писать в него, это дело разработчика программы. Если писатель должен быть один, то в коде писателя давать доступ для записи другим приложениям нецелесообразно. А вот читать в тот момент когда сам что-то туда дописывает обязательно надо. В случае с читателями, если их несколько, обязателен ключ общего чтения для возможности одновременного чтения файла из разных программ. И не следует забывать о том, что если в момент чтения писатель должен дополнить файл новыми данными, то обязательно надо оставить такую возможность.

 
Oleg Arsentev:
 У меня в коде вообще то а не

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

 
Aleksey Mavrin:

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

Перед GetLastError() сбрасывать ошибку не обязательно. Это вам не предопределённая переменная _LastError

 
Alexey Viktorov:

Перед GetLastError() сбрасывать ошибку не обязательно. Это вам не предопределённая переменная _LastError

и кто же и в какой момент сбрасывает значение последней ошибки, чтобы вы не попали на ошибку какого-то предыдущего момента?