Delphi在Windows 7上如何实现高效文件访问和兼容性文件的最佳实践?

2026-04-10 01:571阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计501个文字,预计阅读时间需要3分钟。

Delphi在Windows 7上如何实现高效文件访问和兼容性文件的最佳实践?

将应用软件命名为mysoft,我想读取的文件是afile.bin。mysoft位于程序文件目录中。假设没有使用管理员权限,执行mysoft.procedure TForm1.Button1Click(Sender: TObject); var afile: File of Byte; begin

假设我的应用程序名为mysoft,而我想读取的文件是afile.bin. mysoft位于程序文件夹中.
我们还假设没有使用管理员权限执行mysoft.

procedure TForm1.Button1Click(Sender: TObject); var afile: File of Byte; begin AssignFile(Infile, 'C:\Program Files\mysoft\afile.bin'); Reset(afile); CloseFile(afile); end;

上面的简单代码将在兼容性文件文件夹中创建afile.bin的副本.

Delphi在Windows 7上如何实现高效文件访问和兼容性文件的最佳实践?

我的问题是:

>为什么?我只读了该死的文件,我不想修改它.
>除了在另一个文件夹中移动文件之外,如何防止这种情况?

我再次只阅读数据文件,我不明白.

对Reset的调用导致文件被打开以进行写入.那是因为默认值 System.FileMode是fmOpenReadWrite.由于您的应用程序运行虚拟化,并且由于您的用户令牌没有管理员权限,因此虚拟化层会启动并在虚拟存储中创建该文件的副本.

使用传统Pascal I / O可用的解决方案是将FileMode设置为fmOpenRead.然后重置将打开文件以供读取,并且不会调用虚拟化层.

请记住,FileMode是一个影响所有传统Pascal I / O的全局变量.如果你有线程,或者忘记在需要编写文件时忘记将FileMode设置回fmOpenReadWrite,那么你会感到很遗憾.反叛不是吗?处理广泛的全局标志以控制文件访问模式!好吧,这些东西是在应用程序有线程之前发明的.早在OOP发明之前.所以我能理解为什么会这样.

从中汲取的教训是,现在是时候切换到一种现代形式的文件访问.例如,TFileStream.

实际上,也是您在应用程序中禁用虚拟化的时候了.近6年前,Vista中引入了虚拟化.这对于尚未针对Vista进行重新编译的旧程序来说是一种帮助.您的应用程序不应该仍在使用它.

本文共计501个文字,预计阅读时间需要3分钟。

Delphi在Windows 7上如何实现高效文件访问和兼容性文件的最佳实践?

将应用软件命名为mysoft,我想读取的文件是afile.bin。mysoft位于程序文件目录中。假设没有使用管理员权限,执行mysoft.procedure TForm1.Button1Click(Sender: TObject); var afile: File of Byte; begin

假设我的应用程序名为mysoft,而我想读取的文件是afile.bin. mysoft位于程序文件夹中.
我们还假设没有使用管理员权限执行mysoft.

procedure TForm1.Button1Click(Sender: TObject); var afile: File of Byte; begin AssignFile(Infile, 'C:\Program Files\mysoft\afile.bin'); Reset(afile); CloseFile(afile); end;

上面的简单代码将在兼容性文件文件夹中创建afile.bin的副本.

Delphi在Windows 7上如何实现高效文件访问和兼容性文件的最佳实践?

我的问题是:

>为什么?我只读了该死的文件,我不想修改它.
>除了在另一个文件夹中移动文件之外,如何防止这种情况?

我再次只阅读数据文件,我不明白.

对Reset的调用导致文件被打开以进行写入.那是因为默认值 System.FileMode是fmOpenReadWrite.由于您的应用程序运行虚拟化,并且由于您的用户令牌没有管理员权限,因此虚拟化层会启动并在虚拟存储中创建该文件的副本.

使用传统Pascal I / O可用的解决方案是将FileMode设置为fmOpenRead.然后重置将打开文件以供读取,并且不会调用虚拟化层.

请记住,FileMode是一个影响所有传统Pascal I / O的全局变量.如果你有线程,或者忘记在需要编写文件时忘记将FileMode设置回fmOpenReadWrite,那么你会感到很遗憾.反叛不是吗?处理广泛的全局标志以控制文件访问模式!好吧,这些东西是在应用程序有线程之前发明的.早在OOP发明之前.所以我能理解为什么会这样.

从中汲取的教训是,现在是时候切换到一种现代形式的文件访问.例如,TFileStream.

实际上,也是您在应用程序中禁用虚拟化的时候了.近6年前,Vista中引入了虚拟化.这对于尚未针对Vista进行重新编译的旧程序来说是一种帮助.您的应用程序不应该仍在使用它.