Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-2294
Intell
2004-01-12 16:34
2004.02.02
Меня запарил Explorer!


1-2096
Марат
2004-01-20 08:15
2004.02.02
HotKey


1-2170
такой же циник
2004-01-21 14:29
2004.02.02
изменение разрешения экрана


1-2162
SPIRIT2
2004-01-21 15:23
2004.02.02
TRadioGroup. Строки вылезают за пределы радиогрупа


3-1998
SerKom
2004-01-08 05:39
2004.02.02
Как считать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский