Текущий архив: 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.45 MB
Время: 0.032 c