Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка файла [D7, XP]


Wolferio ©   (2006-11-21 15:16:00) 

Добрый день.
Как проверить используется ли файл другой программой или пользователем, а также испольжуется ли файл по сети.
Использую такую функцию, но она работает не правильно, помогите разобраться:

function WorkFile(fName: string): boolean;
var
HFileRes: HFILE;
begin
Result := false;
if not FileExists(fName) then exit;
HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then CloseHandle(HFileRes);
end;

Заранее благодарен.


clickmaker   (2006-11-22 13:06:00) [1]


> но если файл открыть например Far-ом то функция возвращает
> код ошибки 0 тоисть файл не занят

Far (как и любая другая программа) может открыть, прочитать в память и закрыть


Wolferio   (2006-11-22 13:04:00) [2]

Тему продолжаю снова поскольку даная функция не всегда работает.

    Если файл открыт например Word-омто функци я возвращает код ошибки, тоисть файл занат, но если файл открыть например Far-омто функция возвращает код ошибки 0тоисть файл не занят другой програмой или пользователем. Может у кого есть иной подход к решению этой проблеми.


Anatoly Podgoretsky   (2006-11-21 17:08:00) [3]

> Wolferio  (21.11.2006 16:07:03)  [3]

Ну это совсем простейшая функция, проще быть не может, она возвращает код ошибки

N := GetLastError;


clickmaker   (2006-11-21 16:40:00) [4]


> [3] Wolferio ©   (21.11.06 16:07)

если Handle = INVALID, это всего лишь значит, что файл не удалось открыть. А GetLastError() вернет причину отказа.
Ку?


Wolferio   (2006-11-21 16:07:00) [5]


> И на основании чего сделано сие умозаключение ?

Методом научного..........


> в дополнение к этому
> (HFileRes = INVALID_HANDLE_VALUE);
> надо еще
> GetLastError() = ERROR_SHARING_VIOLATION

После какой строки я должен прописать GetLastError() = ERROR_SHARING_VIOLATION
Если можно пропиши в эту функцию а то я не совсем понимаю.

Спасибо.


clickmaker   (2006-11-21 15:32:00) [6]

в дополнение к этому
(HFileRes = INVALID_HANDLE_VALUE);
надо еще
GetLastError() = ERROR_SHARING_VIOLATION


Сергей М.   (2006-11-21 15:18:00) [7]


> она работает не правильно


И на основании чего сделано сие умозаключение ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо