c - 如何在不打开文件的情况下从文件路径获取内存地址

标签 c windows filesystems

我有一个文件。我知道它的文件路径,我想知道它的内存地址。我的问题是我无法实际打开该文件(无法使用 fopen,因为操作系统认为该文件正在使用中)来获取其内存地址。

例如。 fopen("C:/example/file", "r") 返回 null

据我了解,操作系统在确认文件未使用后返回内存地址。那么是否有可能绕过操作系统?

最佳答案

@Alter 通过查找锁定文件的进程的进程 ID,您可以到达某个地方...您也许能够跟踪内存中的文件内容作为内存的一部分分配给进程的空间。

但是,文件被锁定并不意味着该文件位于内存中。有时只使用文件的一部分,例如 DLL 中的函数 - 只有文件的“已使用”和必要的 block 才会位于内存中。其他时候,整个文档(文件)将非常好且连续地出现在内存中(考虑在记事本中打开的文本文件)。文件也可能纯粹像占位符一样被锁定,其中锁定才是最重要的,并且实际上没有加载任何文件。您确实需要了解很多有关锁定文件的进程的信息。

现在,如果您只想将文件复制到另一个文件,请在“进程”锁定文件之前启动复制。您可以尝试在 Windows 启动时运行一个批处理文件 - 看看是否足够早,可以在锁定文件之前复制该文件。

关于c - 如何在不打开文件的情况下从文件路径获取内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940922/

相关文章:

c - 关于 fork() 的问题

c - 随机(时间(NULL))

c++ - 如何减去两个 LIFETIME?

PHP - ImageCreate() 错误

c++ - 是否有比使用 C++ 的 FindFirstFile/FindNextFile 更快的枚举文件夹的替代方法?

java - 我可以使用 JNDI 访问文件/其内容吗?

json - 转换文件完整内容nodejs

c - 无法从 Linux 计算机将 UDP 发送到多播组

c - C 中的 Hangman。有关数组和字符串的问题

windows - 如何在 Windows XP 的 CMD 中执行汇编语言代码?