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

Вниз

Share режим и TFileStream   Найти похожие ветки 

 
Алексей Ы.   (2009-03-19 01:04) [0]

Привет.

Нашел тут странную конструкцию в 2009, не могу указать Share режимы - они просто не работают в TFileStream  

fmShareDenyWrite  
fmShareDenyRead  
fmShareDenyNone
итп


constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
begin
 if Mode = fmCreate then
 begin
   inherited Create(FileCreate(AFileName, Rights));
   if FHandle = INVALID_HANDLE_VALUE then
     raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(AFileName), SysErrorMessage(GetLastError)]);
 end
 else
 begin
   inherited Create(FileOpen(AFileName, Mode));
   if FHandle = INVALID_HANDLE_VALUE then
     raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(AFileName), SysErrorMessage(GetLastError)]);
 end;
 FFileName := AFileName;
end;


function FileCreate(const FileName: string; Rights: Integer): Integer;
{$IFDEF MSWINDOWS}
begin
 Result := FileCreate(FileName);   << НУ и где они?
end;

function FileCreate(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
begin
 Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
   0,  << Shared Mode - не указывается вообще
nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
end;

Это баг в 2009 только?


 
Palladin ©   (2009-03-19 01:12) [1]

иди и читай справку по режимам открытия... в особенности чем fmCreate отличается от других...
первоткрыватель млин...


 
Алексей Ы.   (2009-03-19 01:16) [2]

Получаем.

При создании-открытии файла fmCreate - никакие Share режимы нельзя указать вообще.
При открытии их также нельзя указать в Rigths.

Когда их можно указать :
только при открытии (т.е. файл должен быть уже до этого создан) и с комбинацией с Mode.

Спрашивается нафига нужно поле Rights в конструкторе TFileStream ?


 
Palladin ©   (2009-03-19 01:28) [3]


> При создании-открытии файла fmCreate - никакие Share режимы
> нельзя указать вообще.

ага, ибо читай про CREATE_ALWAYS


> При открытии их также нельзя указать в Rigths.

фантазируешь на ночь? ну да иногда полезно перед сном... но как бы хотелось в общих словах понять с каких щей ты это взял. и самое интересное тут же дальше пишешь


> Когда их можно указать :только при открытии


ты ломаешь мне мозг


 
Алексей Ы.   (2009-03-19 01:38) [4]


> ага, ибо читай про CREATE_ALWAYS


Вы хотите сказать что при CREATE_ALWAYS нельзя указать FILE_SHARE_READ (и в целом Share режимы)?
Можно, но в TFileStream это нельзя. Об этом и речь.



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

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

Наверх




Память: 0.47 MB
Время: 0.014 c
8-1194337984
Navuh
2007-11-06 11:33
2009.05.17
Работа с огромными изображениями (80.000*42.000)


15-1236720610
Юрий
2009-03-11 00:30
2009.05.17
С днем рождения ! 11 марта 2009 среда


15-1237229765
Кто б сомневался
2009-03-16 21:56
2009.05.17
www.google.com


2-1238783224
Enum
2009-04-03 22:27
2009.05.17
Перехват события


15-1236699497
Кое кто
2009-03-10 18:38
2009.05.17
Включить "Администратор"