Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.004 c
15-1236677968
It's me
2009-03-10 12:39
2009.05.17
Восстановление БД по индексам?


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


4-1210079518
bon
2008-05-06 17:11
2009.05.17
Terminal server


15-1236598494
kuzmich
2009-03-09 14:34
2009.05.17
подскажите как работать с SIP в Delphi


15-1237010852
@!!ex
2009-03-14 09:07
2009.05.17
Подскажите удобный SVN хостинг.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский