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

Вниз

Помогите разобраться с файлами   Найти похожие ветки 

 
Free0n ©   (2005-12-14 23:40) [0]

Как реализовать эту же функцию, но через TMemoryStream ???


Function GetSum(FileName:string):int64;
var f:textfile;
   s:string;
   i:LongInt;
   sum:integer;
begin
sum:=0;
try
assignfile(f,FileName);
reset(f);
While Not EOF(f) do
 begin
  readln(f,s);
  For i:=1 to length(s)-1 do  Sum:=Sum+(Ord(s[i])*Ord(s[i+1]));
 end;
finally
CloseFile(f);
end;
result:=sum;
end;


 
Джо ©   (2005-12-14 23:41) [1]

TMemoryStream не имеет отношение к файлам. Может, подразумевался TFileStream?


 
Free0n ©   (2005-12-14 23:46) [2]

TO Джо


Даже если файл открыт с низкими привелегиями (используя ReadOnly, ShareReadWrite) , иногда открытие уже открытого файла может приводить к ошибкам, особенно, если это файл интенсивно используется другим приложением. Самый простой способ решить эту проблемму - это использовать MemoryStream вместо непосредственного доступа к файлу:

var Memory: TMemoryStream;

begin
 Memory := TMemoryStream.Create;
 try
   Memory.LoadFromFile("busyfile.dat"); // это он!!
   ..
     Memory.Read(...); // Вы можете использовать методы чтения как у файлов
     Memory.Seek(...);
     FileSize := Memory.Size;
     ..
 finally
   Memory.Free;
 end;
end;

Данный способ никогда не открывает файл, а заместо этого создаёт копию его в памяти. Конечно Вы можете и записать в поток (Stream) в Памяти(Memory), но изменения не будут записаны на диск до тех пор, пока Вы не запишете их в файл (командой SaveToFile).

Но у меня возникает проблема - как можно отобразить весь файл?


 
Leonid Troyanovsky ©   (2005-12-15 17:37) [3]


> Free0n ©   (14.12.05 23:40)  
> Как реализовать эту же функцию, но через TMemoryStream ?
> ??


Видимо, не TMemoryStream, а with TStringList.Create do ..
LoadFromFile..
for i = .. do .. Strings[i] ..
SaveToFile..
Free.

Ну, а, вообще,

http://groups.google.com/group/borland.public.delphi.objectpascal/msg/d682a8b5a5760ac4 ;)

--
Regards, LVT.


 
MBo ©   (2005-12-15 18:10) [4]


procedure TForm1.Button3Click(Sender: TObject);
var
 MS:TMemoryStream;
 i:Integer;
 p:PByteArray;
 Sum:Int64;
begin
 MS:=TMemoryStream.Create;
 MS.LoadFromFile("c:\atoms.inp");
 p:=MS.Memory;
 Sum:=0;
 for i:=0 to MS.Size-2 do begin
   if not ((p[i] in [10,13]) or (p[i+1] in [10,13])) then
     Sum:=Sum+p[i]*p[i+1];
 end;
 Caption:=IntToStr(Sum);
 MS.Free;
end;




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

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1133959879
DVM
2005-12-07 15:51
2006.01.01
Загадочная ситуация с трафиком Интернет


14-1134315152
Kerk
2005-12-11 18:32
2006.01.01
Какими не надо делать пользовательские интерфейсы.


1-1133510890
Max Y
2005-12-02 11:08
2006.01.01
"Integer overflow" в cxComboBox с одним элементом в списке!?!?!


3-1131459679
syte_ser78
2005-11-08 17:21
2006.01.01
модератор.мудак:=труе


2-1134596605
x.pro
2005-12-15 00:43
2006.01.01
DLL, весь день бошкой о стену бюсь...