【发布时间】:2017-04-08 21:18:47
【问题描述】:
我制作了一个 C++ 程序,它使用 ofstream 在我的磁盘中创建 2 个文件:一个名为 details.obf,另一个名为 records.txt。文件详细信息里面只有 1 行(1 个整数),文件 records.txt 的行数不固定(它们都是字符串)。
通过下面的代码,我可以获得文件详细信息中的值。这很简单,我使用的是 MemoryStream。
m := TMemoryStream.Create;
try
try
m.LoadFromFile(TPath.Combine(TPath.GetHomePath, 'details.obf'));
m.Read(i, sizeOf(i));
//other stuff...
except
//...
end;
finally
m.Free;
end;
使用下面的代码,我正在读取记录文件的内容:
a := TStreamReader.Create('C:\Users\betom\Desktop\records.txt');
try
while not(a.EndOfStream) do
begin
Memo1.Lines.Add(a.ReadLine);
end;
finally
a.Free;
end;
在第二个代码块中,我使用了一个不同的类 (TStreamReader),并且我已经编写了查看 embarcadero 文档的代码。我不得不使用while not(a.EndOfStream) do,因为records.txt 的长度是未知的。
我看到 MemoryStream(和其他类)都是TStream 的子类。为什么我不能用 m TMemoryStream 调用像 while not(m.EndOfStream) do 这样的东西?
我无法理解 MemoryStream 和 StreamReader 之间的区别。据我了解,后者可以自动读取给定范围内的所有值,而第一个不能。
注意:我已经阅读了文档,我可以拥有一个 TStreamReader 和一个 TStreamWriter,当我需要创建一个包含一些数据的文件时,两者都可以。如果我与 StreamReader 有相同的行为,我只是无法理解 memorystream 的用途。
【问题讨论】:
-
TMemoryStream 将数据存储在动态内存缓冲区中,该缓冲区通过类似文件的访问功能得到增强
-
Memo1.Lines.LoadFromFile()怎么样?