Главная страница
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.013 c
15-1237228271
AlexDan
2009-03-16 21:31
2009.05.17
Тактовая частота.


3-1220966118
Demo_nik
2008-09-09 17:15
2009.05.17
Определение координат ячейки


15-1237413872
Алексей Ы.
2009-03-19 01:04
2009.05.17
Share режим и TFileStream


3-1220958466
BUM
2008-09-09 15:07
2009.05.17
Помогите с запросом


2-1238668101
Den
2009-04-02 14:28
2009.05.17
Туплю с ini-файлом. Чтение значений