小编WeG*_*ars的帖子

缓冲文件(用于更快的磁盘访问)

我正在处理大文件,直接写入磁盘很慢.因为文件很大,我无法在TMemoryStream中加载它.

TFileStream没有缓冲,所以我想知道是否有一个可以提供缓冲流的自定义库,或者我是否应该只依赖OS提供的缓冲.OS缓冲是否可靠?我的意思是如果缓存已满,可以从缓存中刷新旧文件(我的)以便为新文件腾出空间.

我的文件在GB范围内.它包含数百万条记录.不幸的是,记录不是固定大小.所以,我必须做数百万的读数(4到500字节之间).阅读(和写作)是顺序的.我不会上下跳进文件(我认为这是缓冲的理想选择).

最后,我必须将这样的文件写回磁盘(再次写入数百万的小写).


对David Heffernan赞不绝口!
David提供了一段很棒的代码,提供缓冲磁盘访问.
人们你必须拥有他的BufferedFileStream!这是黄金.并且不要忘记upvote.

谢谢大卫.

delphi io buffer file stream

43
推荐指数
4
解决办法
1万
查看次数

新的TFileOpenDialog和旧的TOpenDialog有什么区别?

新的TFileOpenDialog和旧的TOpenDialog有什么区别?
在我的计算机(Win 7/DXE)中,当我运行代码时,对话框看起来一样.

delphi windows-vista windows-7 delphi-xe

42
推荐指数
2
解决办法
8945
查看次数

许可和保护我的Delphi Win32应用程序的工具

我正在寻找保护许可 我的商业软件的工具,理想情况下必须提供与Delphi 7-2010兼容的SDK,支持AES加密,密钥生成器和创建我的应用程序试用版的能力.

我目前正在评估ICE许可证.有人有这个软件的经验吗?

delphi licensing

28
推荐指数
3
解决办法
2万
查看次数

Delphi程序被防病毒程序阻止

我有一段代码试图在一秒钟内写入磁盘许多文件.但是,我已经安装了Kaspersky Anrivirus 2011.

Stream:= TFileStream.Create(sName, fmCreate); 
Run Code Online (Sandbox Code Playgroud)

该代码完全适用于卡巴斯基2010,如果我禁用其扫描仪(它不能完全从内存中卸载 - 除非它已卸载),它也适用于卡巴斯基2011.如果(Kaspersky 2011正在运行并且我懒散地写入磁盘),代码也可以工作.所以它显然不够快,无法处理我的磁盘请求.

我得到的错误是EFCreateError('无法创建xxx文件blablabla').错误是随机的.大多数文件都写入磁盘.大约10%的失败.

我曾试图获得支持但却无法在卡巴斯基找到真正的人与之交谈.他们所谓的"支持"实际上是一个FAQ数据库.当然,它讲的是如何安装产品和相关的东西.关于编程相关问题没有任何内容.有任何想法吗?

PS:这对整个Delphi社区都有影响!如果他们使用KIS 2011作为防病毒软件,我们所有客户都将无法使用Delphi软件.目前我建议我的用户禁用他们的防病毒软件,但我需要一个真正的解决方案.

如果有KIS 2011的人可以确认问题,那就太好了.只需创建一个小程序,使用TFileStream将200个小文件写入磁盘.

更新:

  • 仅当文件不存在且创建(创建而不是覆盖)时才会出现此问题.
  • 类似报道:https://forums.embarcadero.com/thread.jspa?threadID = 32751&tstart = 15
  • 类似的报道:http://forum.kaspersky.com/index.php?showtopic = 120561
  • 我想到的一个可能的解决方案是检测KIS是否正在运行,如果是,则在每次写入磁盘后都要延迟.或者在leat,让用户知道可能存在问题.谁知道如何检测服务是否正在运行?
  • 我添加了650毫秒的延迟(每个文件创建后),但仍然存在错误).所以不是关于你写入磁盘的速度有多快,而是你写的文件数量.
  • 刚卸载的KIS 2011.问题不再出现了.
  • 刚重新安装好的旧KIS 2010.该错误仍然存​​在但很少出现(大约每300个文件,而不是KIS 2011中的大约30个).
  • 问题在第二台计算机上得到证实.
  • 新闻:崩溃出现在TFileStream.Create中,但它可能是由之前调用的函数引起的:TestWriteAccess.如果我禁用此功能,TFileStream.Create不会再失败.嗯,这不会改变太多事情.无论哪一行代码生成错误,程序仍然会(随机)在Kaspersky运行时将文件写入磁盘.
  • 还在等待卡巴斯基真人的回复......
  • 从卡巴斯基支持收到更多自动回复(我在几个国家/地区发送了电子邮件支持).所有指向FAQ数据库.
  • 我将我的状态从卡巴斯基的粉丝(和顾客)改为卡巴斯基的仇恨,因为我终于收到了来自卡巴斯基支持的真人的答案,这简直令人讨厌.

要测试代码,请尝试在循环中使用代码来创建1000个文件.该程序创建了一堆文件(随机数),然后在StreamFile:= TFileStream.Create失败.更新:可以通过在创建每个文件后输入一个小延迟来解决此问题.
https://docs.google.com/forms/d/1H3_O1z1iEqfh9ZT9u3B0R1tGEj-Hc9o7rAE0LKPr33Y

2013年更新

从今天下午开始(更新后)KIS与Delphi发生冲突.每次编译项目时,KIS都会达到100%的CPU利用率.我将不得不卸载它.

2017年更新

从2017年开始,我所有的Delphi程序都会神奇地消失所有误报警.似乎卡巴斯基这样的程序从其病毒列表中删除了Delphi生成的可执行文件就足够了; 所有其他较小的防病毒程序紧随其后.


Delphi 7,Win 7(32),KIS 2011

delphi

28
推荐指数
3
解决办法
4807
查看次数

Delphi XE中的多线程有哪些新功能?

我前段时间已经看到人们在Delphi XE中讨论新的多线程,以及由于Delphi实现多线程的方式,Delphi存在一些"原生"问题.他们建议使用一些外部库来替换默认的Delphi多线程.

你能指点我一些文档和Delphi XE最流行的多线程库吗?谢谢

delphi multithreading delphi-xe

24
推荐指数
6
解决办法
7486
查看次数

Mac上的Delphi - 可能吗?

我负责Delphi/Win32项目管理应用程序.我刚刚完成了Delphi 2009的迁移.

越来越多的美国用户希望在他们的Mac计算机上使用该应用程序,而大多数用户是Windows用户.

是否有解决方案可以轻松构建一个原生在MacOS上运行的Delphi应用程序?

更新:

随着2011年末RAD Studio XE2的发布,Delphi开发人员应该能够构建一次,并在Win 32/64和MacOS 32上进行分发,并承诺提供iOS支持.

delphi macos ios

21
推荐指数
4
解决办法
2万
查看次数

在TObject的"Create"构造函数中继承使用

我应该在从TObject或TPersistent派生的类的构造函数中调用"inherited"吗?

constructor TMyObject.Create;
begin
 inherited Create;   // Delphi doc: Do not create instances of TPersistent. Use TPersistent as a base class when declaring objects that are not components, but that need to be saved to a stream or have their properties assigned to other objects.    
 VectorNames := TStringList.Create;
 Clear;
end;
Run Code Online (Sandbox Code Playgroud)

delphi

21
推荐指数
2
解决办法
7549
查看次数

Delphi 7的简单抗锯齿功能

我需要一个非常简单的函数来绘制一堆具有抗锯齿功能的行.它必须遵循Delphi范式:自包含和SYSTEM INDEPENDENT(没有DLL地狱),快速,简单.有谁知道这样的图书馆?

到现在为止我尝试过:

WuLine
swissdelphicenter.ch/torry/showcode.php?id=1812
我不认为这段代码的作者曾经运行过它.画一条线需要一秒钟!这显然只是出于教育目的:)

来自TMetaFile
链接的抗锯齿图:blog.synopse.info/post/2010/04/02/Antialiased-drawing-from-TMetaFile
还没有真正尝试过这个(我可能很快就会这样做).它仅适用于TMetaFiles.它只加载EMF文件并使用抗锯齿功能绘制它.此外,该网站上的许多代码只是示范/教育.

Image32
非常好的图书馆 - 迄今为止最完整.我可能会用它,但它对于我需要的东西来说太过分了.
缺点:
- 添加到应用程序的足迹非常大.
- 真的很难用.
- 即使是简单的任务,你也需要深入了解其模糊的文档. - 提供的演示代码太复杂了.
- 越野车!
- 没有最近的更新(修复错误)

Anti-Grain Geometry库
该库需要一个不错的安装程序.该库的编写者是Linux/Mac用户.Windows实现看起来很奇怪.我不能对图书馆本身说些什么.

Xiaolin Wu的基础功能(由Andreas Rejbrand撰写)
刚看到以下几篇文章.Andreas Rejbrand提供了一个非常紧凑的解决方案.迄今为止的最佳解决方


看起来我必须解释为什么我不喜欢大型第三方库和VCL:

  • 你必须安装它们
  • 大型库意味着大量的错误
  • 你必须检查更新(并再次安装)
  • 当你重新安装Delphi时,你必须再次安装它们(是的,我讨厌安装VCL)
  • 对于VCL,这意味着你必须在已经拥挤的调色板中加载一些额外的图标.
  • (有时)没有支持
  • 大量的足迹增加了您的应用程序大小
  • 大型图书馆意味着(并非总是但在大多数情况下)难以使用 - 比您需要的更难.
  • (对于外部DLL和API)您的应用程序依赖于系统 - 非常讨厌!

delphi

21
推荐指数
2
解决办法
2万
查看次数

如何正确设置"目录/条件"和"库"路径

如何在项目选项和环境选项中的"库"路径中设置"目录/条件"?德尔福帮助对这些非常重要的设置没有太多说明.我有各种奇怪的错误,因为我的VCL之间存在错误的依赖关系.

1.

我在一个名为ThirdPartyPackages_D7.dpk的包中合并了一大组第三方控件.这在我重新安装Delphi时很有用,因为我不必每年都重新安装所有这些第三方VCL.

然后,我在MyControls_D7.dpk中拥有自己的控件,这取决于ThirdPartyPackages VCL.我还有另一个依赖于MyControls的包BlgPackage.dpk.

在链的末尾是我的应用程序(DPR项目),它使用BlgPackage中的控件.

ThirdPartyPackages.dpk -> MyControls.dpk -> BlgPackage.dpk -> MyApplication.dpr
Run Code Online (Sandbox Code Playgroud)

当我将内容更改/编辑到第二个包(MyControls.dpk)并构建DPR应用程序时,它可以工作.编译器会看到对该包进行的更改.但是,如果我关闭项目并加载并编译BlgPackage,它会抛出一条令人讨厌的消息,即在MyControls中找不到函数xyz,因为我将其删除(我已将MyControls的单元与应用程序的单元并行加载到IDE中).似乎构建应用程序只刷新所有已使用包的DCU文件,但不刷新DCP/BLP文件.

如何编写和编译包中的代码,而无需将包显式加载到IDE中并构建它们?(注意:我有一个令人讨厌的错误,它不允许我在不重新启动IDE或同时加载一组项目/包(*.bpg)的情况下在项目之间切换.)

2.

另一个问题是我想将包的编译文件(DCP/BPL/DCU)存储在其文件夹中(例如c:\ MyProjects\Blg).
如果我将BlgPackage包的"输出目录","单元输出目录"和"DCP输出目录"框设置到其文件夹,不仅会将其BPL/DCU/DCP文件存储在那里,还会存储MyControls的BPL/DCP文件将被存储在那里.如何将每个包的二进制文件放在单独的文件夹中?


Delphi 7,Win XP,所有项目设置为"根据需要重建"

delphi

20
推荐指数
1
解决办法
7912
查看次数

如何将TXT文件作为资源添加到我的EXE文件中?

我有一个包含大约10,000行文本的TXT文件.我想在TMemo中显示这些行.但是我不想在我的程序中分发那个TXT文件.如何将它作为资源WITHIUT使用它集成到我的EXE文件中,stringtable {}因为这需要每行的标识符(所以我将不得不添加10000个标识符).

_

我有Delphi XE

delphi embedded-resource delphi-xe

20
推荐指数
1
解决办法
1万
查看次数