Ошибки, баги, вопросы - страница 2238
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
да ладно )
проверяли же - винда может файл открыть а скрипт нет. проблема с флагом FILE_SHARE_READ
Рекомендую ознакомиться https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files
Рекомендую ознакомиться https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files
Как быть с этим фактом?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2018.07.23 16:48
Явно баг, т.к. с подобными флагами сторонние приложения файл читают без проблем.
Такие файлы
просматриваю в TotalCommander без FileClose. Без FILE_SHARE_READ этого сделать, конечно, не получается
Рекомендую ознакомиться
да, как раз хотел вкинуть.
признаю, что неправ. если первый хендл открыт для записи, второй обязан добавлять флаг FILE_SHARE_WRITE
но есть еще коммент от a100 где вообще записи нетОткрывающему на чтение не хватает флага FILE_SHARE_WRITE (разрешить запись), т.к. имеется пишущий.
Это ограничение системы (WinAPI).
Вот правильные флаги, при котором ваш код будет работать:
Я тоже MSDN читаю. Поясните, это - майкрософт английского не знает, или они сами свою документацию не читают, или - последний вариант - флаги в MQL названы по аналогии WinApi но работают по-другому?
Взято вот отсюда - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea
FILE_SHARE_READ - Enables subsequent open operations on a file or device to request read access. Otherwise, other processes cannot open the file or device if they request read access.
FILE_SHARE_WRITE - Enables subsequent open operations on a file or device to request write access. Otherwise, other processes cannot open the file or device if they request write access.
Исходя из этого, первой программе достаточно указать флаг FILE_SHARE_READ для того чтобы вторая смогла читать. FILE_SHARE_WRITE требуется указать только в случае, когда известно, что помимо первой программы в файл будет писать и вторая.
Вопрос к разработчикам.
Есть функция синхронизации:
С помощью нее иногда получаю такую ошибку:
Т.е. индикатор запускается на USDJPY, и получаю ошибку с символа EURGBP. При этом есть открытый график EURGBP в терминале.
Ошибка 4014 говорит о том, что:
Системная функция не разрешена для вызова
Как такое может быть?
да, как раз хотел вкинуть.
признаю, что неправ. если первый хендл открыт для записи, второй обязан добавлять флаг FILE_SHARE_WRITE
но есть еще коммент от a100 где вообще записи нетЯ тоже MSDN читаю. Поясните, это - майкрософт английского не знает, или они сами свою документацию не читают, или - последний вариант - флаги в MQL названы по аналогии WinApi но работают по-другому?
Взято вот отсюда - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea
FILE_SHARE_READ - Enables subsequent open operations on a file or device to request read access. Otherwise, other processes cannot open the file or device if they request read access.
FILE_SHARE_WRITE - Enables subsequent open operations on a file or device to request write access. Otherwise, other processes cannot open the file or device if they request write access.
Исходя из этого, первой программе достаточно указать флаг FILE_SHARE_READ для того чтобы вторая смогла читать. FILE_SHARE_WRITE требуется указать только в случае, когда известно, что помимо первой программы в файл будет писать и вторая.
Приведите пример в разнице поведения?
По приведённой ссылке, описание флагов не даёт представления о том, как правильно их использовать при попытке открыть один и тот же файл несколько раз.
Основываясь на данных из приведённого Вами описания, попробуйте ответить на вопрос, будут ли валиднымы четвёртый (hread_1) и пятый (hread_2) вызовы в примере ниже?
Сразу скажу ответ: эти вызовы будут невалидными
Я тоже MSDN читаю. Поясните, это - майкрософт английского не знает, или они сами свою документацию не читают, или - последний вариант - флаги в MQL названы по аналогии WinApi но работают по-другому?
Взято вот отсюда - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea
FILE_SHARE_READ - Enables subsequent open operations on a file or device to request read access. Otherwise, other processes cannot open the file or device if they request read access.
FILE_SHARE_WRITE - Enables subsequent open operations on a file or device to request write access. Otherwise, other processes cannot open the file or device if they request write access.
Исходя из этого, первой программе достаточно указать флаг FILE_SHARE_READ для того чтобы вторая смогла читать. FILE_SHARE_WRITE требуется указать только в случае, когда известно, что помимо первой программы в файл будет писать и вторая.
Чтобы не путаться в этих флагах, достаточно твёрдо уяснить, что открывая файл мы этими флагами разрешаем читать и\или писать другим процессам, а не себе.
Чтобы не путаться в этих флагах, достаточно твёрдо уяснить, что открывая файл мы этими флагами разрешаем читать и\или писать другим процессам, а не себе.
Я именно это и говорю, именно так понимаю документацию MS (в частности, тот, кто открывает файл на запись, может разрешить другим совместное чтение). А тот прием использования флагов, который рекомендован для решения, предполагает обратное - что второй процесс с помощью флага совместной записи разрешает себе чтение записываемого файла (т.е. как бы в обход первого процесса поднимает себе права, даже несмотря на то, что первый процесс не указал разрешения на совместный доступ при записи). Это даже звучит противоестественно. Ну да ладно, пойду читать толкования.
Я именно это и говорю, именно так понимаю документацию MS (в частности, тот, кто открывает файл на запись, может разрешить другим совместное чтение).
Может разрешить не только чтение, но и запись тоже. И если предполагается совместная запись, то в каждом должна быть разрешена совместная запись.
А тот прием использования флагов, который рекомендован для решения, предполагает обратное - что второй процесс с помощью флага совместной записи разрешает себе чтение записываемого файла (т.е. как бы в обход первого процесса поднимает себе права, даже несмотря на то, что первый процесс не указал разрешения на совместный доступ при записи). Это даже звучит противоестественно. Ну да ладно, пойду читать толкования.
А это ошибочно. Себе никогда ничего не разрешает и не поднимает себе никаких прав. Флаги FILE_SHARE_READ и FILE_SHARE_WRITE относятся к атрибутам открытого файла. Если в атрибутах нет разрешения от процесса которым файл уже занят, то и использовать этот файл не получится пока его не освободят.
Вот и получается, в тех примерах: Первый открыл файл для записи, разрешил другим процессам чтение, а второй при открытии пытается запретить(не разрешить) запись тому кто уже этот файл использует. Тут-то и получает облом... Типа, кто первый встал тому и тапки...