Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с файлами Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c