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

Вниз

Создание/изменение файла   Найти похожие ветки 

 
SeZuka ©   (2004-12-06 08:22) [0]

Люди добрые подскажите! Мне нужно периодически записывать в конец файла текст, и если такого файла нет, он должен создаваться. Текст примерно такой:

var
 FS: TFileStream;
 s, s1: string;
begin
...
 FS := TFileStream.Create(s, fmCreate); // Открываем файл
 try
   FS.Seek(0, soFromEnd); // Переходим в конец файла
   FS.Write(PChar(s1)^, Length(s1)); // Пишем текст
 finally
   FS.Free; // Закрываем файл
 end;
...

Проблема в том, что файл каждый раз создается заново, хотя везде в хелпе черным по белому написано:
fmCreate Create a file with the given name. If a file with the given name exists, open the file in write mode.
т.е. создается файл с указаным именем и если такой уже существует, то открывает его для записи.
В чем дело, где собака закопана???


 
Александр Иванов ©   (2004-12-06 08:27) [1]

FileExists


 
Fay ©   (2004-12-06 08:28) [2]

var
fh, n: DWORD;
s, s1: string;
begin
 ...
 fh := CreateFile(PChar(s), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0);
 if fh = INVALID_HANDLE_VALUE then RaiseLastOsError;
 try
   SetFilePointer(fh, 0, nil, FILE_END);
   WriteFile(fh, PChar(s1)^, Length(s1), n, nil);
 finally
   CloseHandle(fh);
 end;
 ...


 
Fay ©   (2004-12-06 08:28) [3]

2 Александр Иванов ©   (06.12.04 08:27) [1]
Зачем?


 
SeZuka ©   (2004-12-06 09:03) [4]

2 Александр Иванов ©   (06.12.04 08:27) [1]
Это же двойная работа!

2 Fay ©   (06.12.04 08:28) [2]
Спасибо!
Но все же хочется знать почему TFileStream не работает, это баг дельфи?


 
Fay ©   (2004-12-06 09:06) [5]

2 SeZuka ©   (06.12.04 09:03) [4]
Это, я думаю, баг help-а 8)


 
SeZuka ©   (2004-12-06 09:19) [6]

2 Fay ©   (06.12.04 09:06) [5]
Действительно! :)
Вот его конструктор:

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



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
9-1092186341
Xerx
2004-08-11 05:05
2004.12.19
Как работает OpenGL


3-1100848214
Barmutik
2004-11-19 10:10
2004.12.19
Проблема со скоростью запроса


1-1101925567
sloug
2004-12-01 21:26
2004.12.19
Listbox и Grid


14-1101655076
tw
2004-11-28 18:17
2004.12.19
Заставка


6-1097084387
Stas_on
2004-10-06 21:39
2004.12.19
Как узнать IP компа в сетке из 12+1 компов?