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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
3-1092108604
Sphinxtr
2004-08-10 07:30
2004.09.05
Компонента DBGrid


1-1092771458
god
2004-08-17 23:37
2004.09.05
MP3 ил OGG плеер


14-1091990751
Soft
2004-08-08 22:45
2004.09.05
И Ш К У Ш Ш Т В Е Н Н Ы Й И Н Т Е Л Л Е К Т


1-1092910930
ExpertTech
2004-08-19 14:22
2004.09.05
Считывание из text файла по одному символу


8-1087792169
Shnaider
2004-06-21 08:29
2004.09.05
Эквалайзер