Главная страница
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.049 c
9-1122141384
BigBrother
2005-07-23 21:56
2006.01.01
Очень мало Fps


14-1134040207
SergProger
2005-12-08 14:10
2006.01.01
Как в Pascal


1-1133516129
Igor_thief
2005-12-02 12:35
2006.01.01
Окно встроенное в окно


2-1134477291
Postscriptum
2005-12-13 15:34
2006.01.01
Обновление приложения


2-1134300322
ЕвгенийГость
2005-12-11 14:25
2006.01.01
Пожалуйста, напомните как обрабатывать нажатия клавиш... особенно