
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Файл опять обнулился, теперь и дома и на VPS.
FILE_READ и FILE_SHARE_READ это разные ключи. Ключ FILE_READ всё-же нужен, чтобы не зависеть от умолчания. А ключ FILE_SHARE_READ только разрешает другим читателям этот файл использовать для чтения.
Ключ FILE_SHARE_WRITE позволит писателю перезаписать файл даже в тот момент когда файл читается…
Спасибо, кажется проясняется: то есть писателю я должен добавить FILE_SHARE_WRITE
int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);
А читателю надо добавить?
Файл опять обнулился, теперь и дома и на VPS.
Спасибо, кажется проясняется: то есть писателю я должен добавить FILE_SHARE_WRITE
int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);
А читателю надо добавить?
не надо писателю добавлять SHARE_XXX - он использует файл инклюзивно. Пока он что-то там пишет, никто другой не должен также писать или читать. При открытии - проверить GetLastError() и если что можно разок и повторить если файл кем-то используется
читателю всегда SHARE_READ - они могут читать толпой
флаги режима FILE_TXT, FILE_BIN (и кодировок) должны совпадать у всех. Ну или вы должны очень чётко представлять что тама и предпринимать сами меры по перекодированию
не надо писателю добавлять SHARE_XXX - он использует файл инклюзивно. Пока он что-то там пишет, никто другой не должен также писать или читать. При открытии - проверить GetLastError() и если что можно разок и повторить если файл кем-то используется
читателю всегда SHARE_READ - они могут читать толпой
флаги режима FILE_TXT, FILE_BIN (и кодировок) должны совпадать у всех. Ну или вы должны очень чётко представлять что тама и предпринимать сами меры по перекодированию
Дело в том, что цитата " Ключ FILE_SHARE_WRITE позволит писателю перезаписать файл даже в тот момент когда файл читается… "
без него у меня писатель без этого ключа int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_READ | FILE_TXT); при результате INVALID_HANDLE (возможно если кто-то читает) обнулял файл и при повторных попытках продолжал возвращать 5004.
С эти ключом пока работает, посмотрим как дальше.
Файл опять обнулился, теперь и дома и на VPS.
Спасибо, кажется проясняется: то есть писателю я должен добавить FILE_SHARE_WRITE
int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);
А читателю надо добавить?
Писателю FILE_SHARE_WRITE добавлять не надо. Писателю это надо в том случае, если писатель не один. А вот когда читателей несколько, то каждый должен иметь ключ FILE_SHARE_READ
Эти ключи используются примерно так «Я читаю, но никому не мешаю читать.» или «Я читаю, но никому не мешаю этот файл переписать или дополнить.»
У вас пропала ошибка только потому, что читатель разрешил перезаписать файл в момент чтения. То-есть не факт, что прочли его все читатели, но файл будет перезаписан. А по хорошему это вовсе не ошибка, а сообщение о занятости файла. Блокировка файла происходит только если файл открыт и не закрыт. А если читатель открыл файл, прочёл и закрыл, то после этого писатель без проблем этот файл перезапишет…
Писателю FILE_SHARE_WRITE добавлять не надо. Писателю это надо в том случае, если писатель не один. А вот когда читателей несколько, то каждый должен иметь ключ FILE_SHARE_READ
Эти ключи используются примерно так «Я читаю, но никому не мешаю читать.» или «Я читаю, но никому не мешаю этот файл переписать или дополнить.»
У вас пропала ошибка только потому, что читатель разрешил перезаписать файл в момент чтения. То-есть не факт, что прочли его все читатели, но файл будет перезаписан. А по хорошему это вовсе не ошибка, а сообщение о занятости файла. Блокировка файла происходит только если файл открыт и не закрыт. А если читатель открыл файл, прочёл и закрыл, то после этого писатель без проблем этот файл перезапишет…
Ситуация сдвинулась с мертвой точки: теперь утилита пишет файл и исправляет, если был сбой и он обнулился.
Работает код:
int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);
Осталась проблема с чтением: читатель запомнил, что была ошибка с первым файлом и, не смотря на то что он исправлен, продолжает читать копию.
У читателей код:
int FileHandle1=FileOpen(file_cpy,FILE_READ | FILE_SHARE_READ | FILE_BIN);
Надо пробовать добавить флаг FILE_SHARE_WRITE
Ситуация сдвинулась с мертвой точки: теперь утилита пишет файл и исправляет, если был сбой и он обнулился.
Работает код:
int handl1=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);
Осталась проблема с чтением: читатель запомнил, что была ошибка с первым файлом и, не смотря на то что он исправлен, продолжает читать копию.
У читателей код:
int FileHandle1=FileOpen(file_cpy,FILE_READ | FILE_SHARE_READ | FILE_BIN);
Надо пробовать добавить флаг FILE_SHARE_WRITE
А почему вы пишете текстовый файл, а читаете бинарный?
Потом, чтобы читатель не пытался читать уже прочитанный файл, запомните время прочтения, посмотрите дату создания файла и если дата создания больше даты прочтения, то читаем. Иначе курим на заборе…
А почему вы пишете текстовый файл, а читаете бинарный?
Потом, чтобы читатель не пытался читать уже прочитанный файл, запомните время прочтения, посмотрите дату создания файла и если дата создания больше даты прочтения, то читаем. Иначе курим на заборе…
Иначе у меня не работает.
Дело в том, что читатель пытается прочитать исправленный файл, однако при открытии получает ошибку 5004.
Поставил флаг FILE_SHARE_WRITE на чтение.
Пока работает.
Иначе у меня не работает.
Это ответ на этот вопрос???
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как удалить или исправить файл после ошибки 5004 ?
Alexey Viktorov, 2024.03.14 15:13
А почему вы пишете текстовый файл, а читаете бинарный?
Это ответ на этот вопрос???
FILE_ANSI