Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Файл открыт приложением DOS   Найти похожие ветки 

 
Андрей Сенченко ©   (2004-01-18 13:51) [0]

Как определить subj ?

Не выходит ни через
try
reset(f,"c:\text.txt")
exept

ни через
H := OpenFile(PChar("c:\text.txt"),of_struct,OF_READWRITE or OF_SHARE_EXCLUSIVE);

Если файл открыт EDIT-ом например, тишина полная


 
alex_*** ©   (2004-01-18 14:10) [1]

какая тебе разница, чем открыт файл? или ты хочешь открыть файл уже где-то открытый? Тогда нужно в другом режиме открывать файл


 
Андрей Сенченко ©   (2004-01-18 14:20) [2]

alex_*** © (18.01.04 14:10) [1]

Фактически задача выглядит так :
1. Перемещаем файл запроса с компа А на комп Б.
2. На компе Б стоит обработчик, который по файлу запроса создает ответ и кладет его обратно.
3. Перемещаем файл ответа с компа Б на комп А.

Проблема в том, чтобы не начать перемещать ответ пока он пишется. Писать ответ в темповый файл и затем переименовывать его не хочется - лишние операции на компе Б нежелательны.
В данный момент ставится Sleep() на время с момента обнаружения файла FindFirst-ом на время, в которое ответ гарантированно запишется.
Хочется сделать покрасивше, то есть проверить - открыт ли еще файл ответа на запись и если уже нет - запустить копирование.


 
Андрей Сенченко ©   (2004-01-18 14:25) [3]

да .. вот еще. В том плане, что не все йогурты одинаково полезны. Собственно программа-перемещалка висит на компе С.
Комп А - физически новелловский сервер.
Комп Б - физически сервер под Win2000
Комп С - физически что угодно ( по факту - от 95-х до 2000-х виндов )


 
Anatoly Podgoretsky ©   (2004-01-18 14:25) [4]

Где анализ H?


 
Андрей Сенченко ©   (2004-01-18 14:31) [5]

// Function CheckFileOpen(f : string) : boolean;
// var
// H : hwnd;
// of_struct : TOFStruct;
//begin
// H := OpenFile(PChar("c:\text.txt"),of_struct,OF_READWRITE or OF_SHARE_EXCLUSIVE);
// if H <> HFILE_ERROR
// then {открыто}
// else {закрыто};
// CloseHandle(H);
// end;

Взял давным-давно здесь же, в форуме. Вот решил попробовать по факту возникновения задачи. Вроде как согласно прочитанному F1 должно работать, но не получается.
Не понятно еще как использовать TOfStruct - Хелп достаточно скудный, в моем букваре ( Фаронов - Delphi 5 ) рл этому поводу тишина.


 
Anatoly Podgoretsky ©   (2004-01-18 14:36) [6]

Из справки

This function is provided for compatibility with 16-bit versions of Windows.
Win32-based applications should use the CreateFile function.


 
Андрей Сенченко ©   (2004-01-18 14:48) [7]

Anatoly Podgoretsky © (18.01.04 14:36) [6]

Прочитал. И CreateFile прочитал. Я давно уже перестал здесь лазать с вопросами, пока сам не упрусь.

HANDLE CreateFile(

LPCTSTR lpFileName,
// Тут все понятно
DWORD dwDesiredAccess,
// По идее тут нужно попытаться получить только GENERIC_READ
DWORD dwShareMode,
// Опять же, насколько я понимаю достаточно FILE_SHARE_READ
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
// Вот здесь неясно. Сам клиент-копировалка стоять может
// как я уже говорил на виндах с 95 по 2000-й, файл нужно
// забирать с 2000-х, а я все не слезу с 98-х ( особенности
// постоянной работы под ДОС и вопросы доступа в 2000-х
// знаю только по наслышке.
DWORD dwCreationDistribution,
// OPEN_EXISTING судя по всему
DWORD dwFlagsAndAttributes,
// опять же не совсем ясно, но судя по всему FILE_ATTRIBUTE_NORMAL
HANDLE hTemplateFile
// смущает "with attributes to copy"
);


 
Anatoly Podgoretsky ©   (2004-01-18 14:59) [8]

dwShareMode для эксклузивного доступа 0

lpSecurityAttributes ставь 0

dwFlagsAndAttributes можно FILE_ATTRIBUTE_ARCHIVE и можно добавить FILE_FLAG_NO_BUFFERING и или FILE_FLAG_RANDOM_ACCESS/FILE_FLAG_SEQUENTIAL_SCAN для управления производительностью

hTemplateFile ставь 0


 
Андрей Сенченко ©   (2004-01-19 14:05) [9]

Все равно не получается ...
Может я что-то неправильно понимаю ? По тому, что смог прочитать в хелпе вот эта функция

Function CheckFileFree(fname:pchar) : boolean;
var
HFile : hwnd;
begin
HFile := CreateFile(fname,
GENERIC_READ + GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
If HFile <> 0
then checkfilefree := true
else checkfilefree := false;
CloseHandle(HFile);
end;


Должна возвращать true только если удалось получить доступ к файлу на read-write access. В противном случае она просто не должна получить хэндл и соответственно должна вернуть false ( как я это понимаю ).
Разве можно получить такой доступ к файлу, открытому другим приложением ?
Или ошибка в 17-й строке ?


 
NAlexey ©   (2004-01-19 14:15) [10]

Попробуй так:
FHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if FHandle = INVALID_HANDLE_VALUE then


 
Андрей Сенченко ©   (2004-01-21 21:21) [11]

Так не вышло .... два дня кручусь и без результатно.

Видать придется таки задавать вопрос типа "Хелп пипл ! как узнать что файл открыт на запись"

Спасибо всем, принявшим участие в моем обучении.


 
panov ©   (2004-01-22 09:35) [12]

Работал с подобными задачами.
Опиши подробнее, каким образом файл на каждом этапе записывается, частоту, примерные размеры файлов...



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
3-1983
Aleks_S
2004-01-07 16:07
2004.02.02
Порядок полей в структуре таблицы.


3-1991
Yulik
2004-01-08 12:28
2004.02.02
Как выполнить Oracle-package?


6-2262
crazycyborg
2003-11-24 11:41
2004.02.02
Получение имени пользователя по имени компьютера


3-1959
KIR
2004-01-09 13:41
2004.02.02
Можно ли сложить строки в ХП IB


3-1977
jocko
2004-01-08 13:50
2004.02.02
Соединение с сервером ADO