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

Вниз

Запись и чтение файла.   Найти похожие ветки 

 
Endi   (2004-08-19 01:52) [0]

Всем привет!

Сегодня возникла проблема, которую я совсем не ждал, да и за проблему никогда не считал.

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

Может кто встречался с такой проблемой.
За ранее, спасибо, за помощь.


 
Алхимик ©   (2004-08-19 02:01) [1]

Как говорится - это не проблема, а задача.
В общем случае:
1.Создал файл.
2.Записал несколько байтов.
3.Присобачил всё остальное.
4.Запомнил имя старого файла.
5.Прибил старый файл.
6.Поменял имя нового файла на имя старого.


 
gid   (2004-08-19 09:08) [2]

assignfile(f,"c:\qqq");
rewrite(f);
reset(f);
write(f,{переменная тавоже типа что и сям файл});
read(f,,{переменная тавоже типа что и сям файл});
seek()//Куда смещаться
closefile(f);//закрыть

Чего еще непонятно??????????


 
Kair_   (2004-08-19 09:37) [3]

var
 b: Byte;
begin
AssignFile(F, "FileName");
Rewrite(F, 1);
for b := 1 to 10 do
 BlockWrite(F, b, 1);
CloseFile(F);
end;

P.S. Кажись так... :)


 
Endi   (2004-08-19 11:04) [4]

2gid
Как это? Ты же файл обнулил. Там уже считывать нечего.

Вот какой код был у меня:


var
Buf,FileBuf:AnsiString;
F:file;
Len:cardinal;

begin
AssignFile(F,"c:\aaa.log");
Reset(F);
Len:=FileSize(F);
BlockRead(F,FileBuf,Len); //считываю весь файл в FileBuf
Rewrite(F);
Reset(F);
Buf:="Added"; //То что нужно записать в начало
BlockWrite(F,Buf,Length(Buf)); //Сначала записываю Buf
BlockWrite(F,FileBuf,Length(FileBuf)); //Теперь записываю FileBuf
CloseFile(F);
end;


Так вот это не работает. То он по 512 байт пишет файлы, то они нулевые, а то, вообще ошибку i/o выдает.


 
Smithson   (2004-08-19 11:08) [5]

SetLenght забыл делать строкам :)


 
Fay ©   (2004-08-19 11:13) [6]


procedure TForm1.Button3Click(Sender : TObject);
const
 BSZ = 1 shl 16;
var
 h, nr, nw : DWORD;
 p : PChar;
 s : string;
begin
 s := "Строка, которую ты пишешь в начало. Просто пример"#13#10;
 p := nil;
 h := INVALID_HANDLE_VALUE;
 try
   GetMem(p, BSZ);
   h := CreateFile("c:\_BOL.sql", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
   if h = INVALID_HANDLE_VALUE then RaiseLastOSError;
   ReadFile(h, p^, BSZ, nr, nil);
   SetFilePointer(h, 0, nil, FILE_BEGIN);
   WriteFile(h, PChar(@s[1])^, Length(s), nw, nil);
   while nr > 0 do
     begin
       WriteFile(h, p^, nr, nw, nil);
       ReadFile(h, p^, BSZ, nr, nil);
     end;
 finally
   if h <> INVALID_HANDLE_VALUE then CloseHandle(h);
   if p <> nil then FreeMem(p, BSZ);
 end;
end;


 
Rem   (2004-08-19 11:17) [7]

Reset(F, 1);


 
icWasya ©   (2004-08-19 14:04) [8]

[4]
Вот какой код был у меня:

а как надо
var
Buf,FileBuf:AnsiString;
F:file;
Len:cardinal;

begin
AssignFile(F,"c:\aaa.log");
Reset(F,1); // раз
Len:=FileSize(F);
SetLength(FileBuf,Len);
BlockRead(F,FileBuf[1],Len); //считываю весь файл в FileBuf
closefile(F);
Rewrite(F);
// нафиг Reset(F);
Buf:="Added"; //То что нужно записать в начало
BlockWrite(F,Buf[1],Length(Buf)); //Сначала записываю Buf
BlockWrite(F,FileBuf[1],Length(FileBuf)); //Теперь записываю FileBuf
CloseFile(F);
end;



 
icWasya ©   (2004-08-19 14:12) [9]

в догонку

а как надо

var
Buf,FileBuf:AnsiString;
F:file;
Len:cardinal;

begin
AssignFile(F,"c:\aaa.log");
Reset(F,1); // раз
Len:=FileSize(F);
SetLength(FileBuf,Len);
BlockRead(F,FileBuf[1],Len); //считываю весь файл в FileBuf
closefile(F);
Rewrite(F,1);// !!!
// нафиг Reset(F);
Buf:="Added"; //То что нужно записать в начало
BlockWrite(F,Buf[1],Length(Buf)); //Сначала записываю Buf
BlockWrite(F,FileBuf[1],Length(FileBuf)); //Теперь записываю FileBuf
CloseFile(F);
end;


 
Endi   (2004-08-20 00:30) [10]

icWasya Огромное человеческое спасибо. :)
А я то никак не мог понять, почему при слиянии FileBuf и Buf у меня все время получалась ошибка.



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

Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
3-1092028798
Beethoven
2004-08-09 09:19
2004.09.05
Delphi &amp; MySkyl


1-1092826258
Makssim
2004-08-18 14:50
2004.09.05
Как удалить строку из файла?


1-1092713955
DmiSb
2004-08-17 07:39
2004.09.05
Аналог TStringAdapter в КОЛ ?


1-1092755778
Gear
2004-08-17 19:16
2004.09.05
мерцание в ListBox


4-1090356969
[ping]VIN
2004-07-21 00:56
2004.09.05
GetLogicalDrivers





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