Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизФайл открыт приложением 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c