Главная страница
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.026 c
14-1101549347
KilkennyCat
2004-11-27 12:55
2004.12.19
Забавно, но факт, дающий пищу для размышлений...


4-1099408506
TSoftMan
2004-11-02 18:15
2004.12.19
Расширения и программы


9-1091463999
Xerx
2004-08-02 20:26
2004.12.19
Внутри сферы


1-1102258676
AdmeraL
2004-12-05 17:57
2004.12.19
TServerSocket и TClientSocket


6-1097064362
Rext
2004-10-06 16:06
2004.12.19
Ошибка при создании FTP-соединения