问题标签 [tfilestream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7198 浏览

delphi - 如何刷新 TFileStream?

TFileStream 提供缓冲输出,这在大多数情况下都很棒,但在某些情况下(尤其是在调试期间)最好立即刷新缓冲区。问题是,除了调用 Free 之外,我不知道有任何方法可以做到这一点,这会适得其反。

有更好的方法吗?

0 投票
4 回答
15372 浏览

delphi - (Wide)String - 存储在TFileStream,Delphi 7中。最快的方法是什么?

我正在使用 Delphi7(非 unicode VCL),我需要在 TFileStream 中存储大量 WideStrings。我不能使用 TStringStream 因为(宽)字符串与二进制数据混合,该格式预计可以加速加载和写入数据......但是我相信我当前加载/写入字符串的方式可能是我的代码的瓶颈......

目前我正在写一个字符串的长度,然后逐个字符地写它......在加载时,首先我正在加载长度,然后逐个字符地加载字符......

那么,将 WideString 保存和加载到 TFileStream 的最快方法是什么?

提前致谢

0 投票
2 回答
1808 浏览

delphi - tfilestream.seek 和偏移混淆

这是取自https://forums.embarcadero.com/message.jspa?messageID=219481的代码片段

我不明白究竟是什么偏移以及为什么 Max(0,Fs.Size-1024) 在它的占位符中,如果你去下面(在代码中)

'-1024'到底是什么......为什么总是使用1024 / -1024?并且 fs.size 会单独在偏移领跑者工作中(我正在尝试使用暂停恢复支持进行下载管理)并且在上面的代码中用 tmemmorystream 替换 tfilestream 会对程序产生任何影响吗?

如果重要:我使用 d2007 和 d2010

0 投票
1 回答
2244 浏览

delphi - 如果我在任何地方释放文件流实例,文件未收到?

我正在尝试使用TServerSocket/发送文件TClientSocket。只要我不在任何地方和任何地方释放文件流,文件就会完全发送,我的意思是form.OnCreate事件。如果我在任何地方免费,只会发送 1% 或 2%。

我还必须将这TFileStream.Create行代码放在服务器端OnCreate事件上。如果我在其中创建一个流,TForm2.ServerSocket1ClientRead我会得到一个EFcreateerror:'该进程无法访问文件,因为它正在被另一个进程使用''。

即使我这样写代码:

即使那样,它也给我带来了问题。

这是什么奇怪的现象?这是德尔福的一个错误吗?如果是,是否有解决方法?如果重要的话:我使用的是 Delphi 2010。

更新:对不起,我的意思是如果我这样写代码:

对不起,不是,fstream.size而是filesize。我已经将文件大小初始化为 300000(要接收的文件大小)。

已解决:通过替换解决

0 投票
2 回答
2042 浏览

delphi - Delphi TFileStream.Seek,如何检查无效的查找偏移量

我在 Delphi 2006 中使用 TFileStream。当我使用超出范围的偏移量调用 TFileStream.Seek 时,我得到不同的返回值。当我寻找低于流开头的位置时,该函数返回 -1,如果我寻找超出流大小的位置,则该函数返回如果流那么大,该位置将是流中的位置。有没有办法检查流上的查找操作是否成功?为什么当查找偏移量超出当前流大小的范围时 TFileStream.Seek 不会失败?

提前致谢。

0 投票
1 回答
2287 浏览

delphi - 如何检测 tfilestream 是否已被释放?

有没有办法查看是否正在使用 tfile 流的实例?例如,如果我声明 tfilestream 类型的 FS,将缓冲区写入它,最后使用 tfilestream.free 释放流,我可以检查以下内容:

activebeingused方法并不真实存在,我们也不能测试tfilestream.free = true 只是为了让我知道我想问什么

0 投票
6 回答
5303 浏览

delphi - 创建 FileStream 时如何处理异常

我有这样的功能,我想重构

问题:

请参阅上述过程 SomeOtherCode 中的注释。

最好的祝福

0 投票
3 回答
4905 浏览

delphi - 在 Delphi 中读取大文件的最快方法是什么?

我的程序需要从一个随机访问的巨大二进制文件中读取块。我有一个可能有几千个条目的偏移量和长度列表。用户选择一个条目,程序寻找偏移量并读取长度字节。

该程序在内部使用 TMemoryStream 来存储和处理从文件中读取的块。读取数据是通过 TFileStream 完成的,如下所示:

这工作正常,但不幸的是,随着文件变大,它变得越来越慢。文件大小从几兆字节开始,但经常达到几十千兆字节。读取的块大小约为 100 KB。

该文件的内容只能由我的程序读取。它是当时唯一访问该文件的程序。文件也存储在本地,因此这不是网络问题。

我在 Windows XP 机器上使用 Delphi 2007。

我能做些什么来加快这个文件的访问速度?

编辑:

  • 无论读取文件的哪个部分,大文件的文件访问都很慢。
  • 程序通常不会顺序读取文件。块的顺序是用户驱动的,无法预测。
  • 从大文件中读取块总是比从小文件中读取同样大的块要慢。
  • 我说的是从文件中读取块的性能,而不是处理整个文件所需的总时间。对于较大的文件,后者显然需要更长的时间,但这不是这里的问题。

我需要向大家道歉:在我按照建议使用内存映射文件实现文件访问之后,结果证明它并没有太大的区别。但是在我添加了更多的计时代码之后,结果也证明不是文件访问会减慢程序的速度。无论文件大小如何,文件访问实际上都需要几乎恒定的时间。用户界面的某些部分(我尚未确定)似乎存在大量数据的性能问题,并且不知何故,当我第一次对流程进行计时时,我没有看到差异。

我很抱歉在确定瓶颈方面草率。

0 投票
2 回答
1625 浏览

delphi - 带偏移量的 TFileStream

我需要扩展 TFileStream 以便它可以使用不是从 0 偏移量开始,而是从用户定义的偏移量开始的文件。我的意思是它必须将用户定义的偏移量解释为流的开始。我的代码是:

但它不能正常工作。问题出在 Seek 函数中,但我不知道为什么。当我将此类流传递给第三方组件时,它仅在 TSuFileStream.Offset := 0; 时才有效

0 投票
1 回答
633 浏览

delphi - Delphi HTTP App在将文件加载到流中时引发错误

我一直在研究 HTTP Web 服务器应用程序(通过),在将文件加载到流( )以发送回客户端TIdHTTPWebBrokerBridge时遇到了一点问题。TFileStream它不会每次都发生,但很随机......我一直有一个例外......

Cannot open file "C:\SomePath\SomeFile.html". The process cannot access the file because it is being used by another process

它发生在这一行:

Str:= TFileStream.Create('C:\SomePath\SomeFile.html', fmOpenRead);

(Str是一个TFileStream

我假设该信息不言自明,但我绝对需要避免它。这个异常只在调试模式下发生,但我需要调试这个东西而不用担心一直收到这个消息。

奇怪的是,大多数时候,文件都会被加载并发送回去。

我怎么能避免这种情况呢?为什么它不允许我多次打开它,即使它是只读的?