Paul
|
|
« : 30-06-2010 11:19 » |
|
Есть программа работающая с файлом, нужно этой файл прочитать из другой. При попытке открытия файла для чтения получаю INVALID_HANDLE_VALUE, при этом через fopen("my.file","r") всё читается нормально. m_h=CreateFile("my.file",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL); if(m_h==INVALID_HANDLE_VALUE) { int h=GetLastError(); AddToLog("Открытие файла ... Error!"); return; }
|
|
« Последнее редактирование: 01-07-2010 04:40 от Paul »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #1 : 30-06-2010 12:48 » |
|
А GetLastError что говорит?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 30-06-2010 18:52 » |
|
а так
m_h=CreateFile("my.file",GENERIC_READ,0,0,OPEN_EXISTING,0,0);
|
|
|
Записан
|
|
|
|
Paul
|
|
« Ответ #3 : 01-07-2010 04:28 » |
|
GetLastError возвращает 32 (The process cannot access the file because it is being used by another process.) m_h=CreateFile("my.file",GENERIC_READ,0,0,OPEN_EXISTING,0,0); Не помогает. Добавлено в 2010-07-01, 08:40:00:В общем проблема решалась таким вот способом. CreateFile(protName+".grp", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 01-07-2010 10:58 » |
|
Паш, загадка какая-то )) FILE_SHARE_READ Разрешает последующие операции открытия объекта, которые требуют доступа для чтения. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для чтения. Если этот флажок не определяется, но объект уже был открыт с доступом для чтения, то функция завершается ошибкой. FILE_SHARE_WRITE Разрешает последующие операции открытия объекта, которые требуют доступа для записи. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для записи. Если этот флажок не определяется, но объект уже был открыт с доступом для записи, то функция завершается ошибкой.
то есть, важно то, как открыли файл ДО твоей программы: а именно, там должны были указать FILE_SHARE_READ, чтобы ты смог открыть файл с GENERIC_READ а сочетание FILE_SHARE_READ | FILE_SHARE_WRITE к этому всему отношения имхо не имеет - это лишь позволит другим приложениям тоже потом совместно открыть файл
|
|
« Последнее редактирование: 06-07-2010 02:51 от Алексей1153++ »
|
Записан
|
|
|
|
Paul
|
|
« Ответ #5 : 05-07-2010 16:43 » |
|
Тоже не понял почему, но главное работает
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #6 : 05-07-2010 18:43 » |
|
Ну если Леша написал правду (лень МСДН открывать), а именно Если этот флажок не определяется, но объект уже был открыт с доступом для записи, то функция завершается ошибкой.
тогда чего тут непонятного. Всё так и получается.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 06-07-2010 02:52 » |
|
resource, цитата была как раз из МСДН )
Паш, наверное, твоя программа открывала файл, а потом она же (другой экземпляр) снова открывала. Вот такой эффект и вышел
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #8 : 06-07-2010 09:31 » |
|
Я так понял, что об этом и было написано. Есть программа работающая с файлом, нужно этой файл прочитать из другой
|
|
|
Записан
|
|
|
|
Paul
|
|
« Ответ #9 : 06-07-2010 09:46 » |
|
Лёх, программы открывающие файл - разные. Первая, которая изначально открывает файл написана неизвестным автором на делфях, вторая пишется мной. в общем как выйдешь из отпуска покажу тебе.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 10-09-2010 03:29 » |
|
о, кстати! Похожая фигня попалась на днях, только решилась по другому: лог-файл одной программы прекрасно открывался в блокноте, но отказывался открываться из программы при помощи CreateFile под предлогом "файл занят другим процессом". Но указание этих двух флагов (авось поможет) не дало результатов, поэтому сделал иначе: скопировал файл и открыл копию )) Мне только чтение нужно было.
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #11 : 12-09-2010 15:05 » |
|
Алексей1153++, +1 у меня аналогичная ситуация была. Сделал втупую копирование и чтение, чтоб не разбираться долго
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 12-09-2010 16:17 » |
|
baldr, а осадок остался... Ведь блокнот как-то же открывает, зараза! ))
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #13 : 12-09-2010 16:21 » |
|
Алексей1153++, прямой доступ к диску
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 12-09-2010 16:24 » |
|
да сильно сомневаюсь, что блокнотяра такой продвинутый
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #15 : 14-09-2010 04:53 » |
|
Леш, ну флаги не те указал, вот и все. Тут никакой мистики быть не может.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 14-09-2010 05:09 » |
|
resource, а какие надо ТЕ флаги? ))
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #17 : 14-09-2010 06:16 » |
|
Это всегда зависит от ситуации. Я же не знаю, какие флаги ты там поставил.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 14-09-2010 06:40 » |
|
resource, я поставил сначала 0, потом пробовал с generic_read|generic_write. А лог не мой - его другая программа создаёт
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #19 : 14-09-2010 20:57 » |
|
Если тебе только читать надо, ставь только GENERIC_READ. И еще немаловажно что задано в dwShareMode. Многие люди не парятся особо с этим параметром, и ставят совсем не то, что надо. Но как я понял по предыдущим постам, ты с ним знаком в достаточной степени.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 15-09-2010 05:42 » |
|
в общем, дело ясное , что дело тёмное dwShareMode мне тут мало поможет, так как та, другая, программа могла там 0 поставить. Но блокнот всё же как-то открывает )) Но как я понял по предыдущим постам, ты с ним знаком в достаточной степени
Судя по всему, в недостаточной (
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #21 : 16-09-2010 05:44 » |
|
Да ничего темного. Ставь GENERIC_READ и (FILE_SHARE_READ | FILE_SHARE_WRITE).
ЗЫ это все с учетом того, что блокнот все-таки открывает файл
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 16-09-2010 06:18 » |
|
Да ничего темного. Ставь GENERIC_READ и (FILE_SHARE_READ | FILE_SHARE_WRITE).
ЗЫ это все с учетом того, что блокнот все-таки открывает файл
ставил и так, и всяко по-другому пробовал, один хрен А блокнот открывает Заразо такое.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #23 : 16-09-2010 22:45 » |
|
Леш, не верю (как Станиславский). Давай посмотрим. Как воспроизвести это дело?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #24 : 17-09-2010 03:29 » |
|
Леш, не верю (как Станиславский). Давай посмотрим. Как воспроизвести это дело?
resource, хм.. Ты не согласишься на этот эксперимент ) В общем, нужно: 1) установить MS Essential 2) обновить его по самое нехочу (а то проверять откажется) 3) добыть файл, заражённый вирусом 4) проверить этот файл 5) вот далее начинается песня: mse делает лог, который в блокноте я могу просмотреть, а из своей программы не могу напрямую подступиться (вертается ошибка "файл занят другим процессом"). Вроде все условия рассказал ? ))
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #25 : 20-09-2010 19:59 » |
|
Ну не то чтобы я не согласился, просто дома не вполне лицензия (винда) стоит ) а как он будет обновляться при таком раскладе не знаю. Так то на виртуалке можно было попробовать. А обновления можно качнуть откуда-нибудь и подсунуть ему ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 21-09-2010 03:29 » |
|
resource, я ставил на виртуалбоксе семёрку, а туда MSE. Он вроде проверял, лицензионная или нет, но сказал - всё ОК. Обновился по тырнету, заработал
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #27 : 21-09-2010 06:37 » |
|
На выходных попробую, если конечно не проведу их на работе, как прошлые.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 21-09-2010 06:39 » |
|
ок у тебя ещё и выходные бывают ? Шикуешь! (с)
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #29 : 21-09-2010 07:08 » |
|
Нда... Нехорошо. По выходным надо работать дома.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|