【问题标题】:how to prevent that the OS or other programs writes on a storage device in the same time as my program does如何防止操作系统或其他程序与我的程序同时写入存储设备
【发布时间】:2011-06-07 11:42:42
【问题描述】:

我是一名 Delphi 程序员。 我想用虚拟文件填充存储设备的整个可用空间。 在此操作期间,我想防止 Windows 或其他程序在设备上写入。 我知道这是可行的,因为我见过可以做到这一点的程序。

我已经有了创建虚拟文件的代码(使用 TFileStream,在 NTFS 上非常快),所以我只需要某种锁定/解锁代码。

有人知道方法吗? 感谢您的任何建议。

如果整个程序能够更好地运行,我会接受甚至会改变我创建这些文件的方式的解决方案。

谢谢。

最好的问候,约翰。

【问题讨论】:

  • 当您解锁设备时,如何阻止某人释放驱动器上的空间?
  • 为什么需要锁定?为什么不直接写,直到系统报告磁盘空间不足错误?到那时你就知道你已经填满了。
  • “我知道这是可行的,因为我见过可以这样做的程序。” - 我不知道你似乎在问什么是可能的。你看到其他程序到底做了什么?
  • @David,当然,这是可能的,但是如果我不能做出完美的程序(没人能做到),那就意味着停止开发这个程序..?对于您的第二条评论:我已经回复了几次原因:主要原因是程序需要快速并尽量减少在棍子上的书写操作。 @ChrisW 例如,我使用了在操作前锁定驱动器的备份程序,即使它们编写简单的文件。
  • @ChrisW 好吧,我不能 100% 确定这在每种情况下都是“锁定”。但似乎是这样:我无法再访问驱动器了。有些程序甚至使用“锁”这个词。

标签: delphi locking


【解决方案1】:

有一个SetEndOfFile 函数可能是事务性的(即它要么成功要么失败),我认为(我没有测试/检查过)你可以使用它来增加文件以填充可用空间。

【讨论】:

  • 这个答案比我的要好得多!
  • 是的,我知道,这有点像使用“try TFileStream.Size := Size; Result := True; except Result := False; end”。问题之一是您必须“猜测”新尺寸。在此期间,您必须尝试许多值 + 同时操作系统或其他程序可以再次写入 USB 驱动器。
  • @john 慢一分钟!这就是文件系统的工作方式。它们可以被修改。即使您可以以某种方式锁定,一旦您解锁,又是什么阻止另一个应用程序删除您的虚拟文件?你能回答吗?
  • @David,当然,什么都没有。确实如此。但是另一个应用程序“看到”该文件并“认为”删除它是一个好主意的机会有多大?用户决定如何在他的计算机上使用这些程序,而我所能做的就是确保在他无法直接控制的区域一切顺利。
  • @John Mirror - 还有一个“FSCTL_LOCK_VOLUME 控制代码”,例如记录在msdn.microsoft.com/en-us/library/aa364575(v=VS.85).aspx,这可能与您的需求有关。
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多