Главная страница
    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.45 MB
Время: 0.032 c
14-1101398500
Vn
2004-11-25 19:01
2004.12.19
Из каких СМИ узнаем информацию?


14-1101926263
Knight
2004-12-01 21:37
2004.12.19
Можно ли подключить в VMWare модем?


3-1100863630
Irina :)
2004-11-19 14:27
2004.12.19
Восстановление базы


8-1095532400
Sulimxar
2004-09-18 22:33
2004.12.19
Помогите понять Битрейт


1-1102320665
tytus
2004-12-06 11:11
2004.12.19
Как проверить ввод символа в TEdit?





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