![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с файлами [D7, WinXP]
Free0n © (2005-12-14 23:40:00)Как реализовать эту же функцию, но через 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;
MBo (2005-12-15 18:10:00) [1]
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;
Leonid Troyanovsky (2005-12-15 17:37:00) [2]
> 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.
Free0n (2005-12-14 23:46:00) [3]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).
Но у меня возникает проблема - как можно отобразить весь файл?
Джо (2005-12-14 23:41:00) [4]TMemoryStream не имеет отношение к файлам. Может, подразумевался TFileStream?