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

时间:2014-11-15 00:10:17

标签: c windows filesystems

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

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

为什么我理解操作系统在确认文件未被使用后返回内存地址。那么甚至可以通过操作系统来进行操作吗?

1 个答案:

答案 0 :(得分:1)

@Alter通过找到对文件有锁的进程的Process ID,你可以到达某个地方......你可能能够在内存中跟踪你的文件内容,作为分配给它的内存空间的一部分过程

但是,仅仅因为文件被锁定并不意味着文件在内存中。有时只使用文件的一部分,就像DLL中的函数一样 - 只有文件的'used'和必要块才会在内存中。其他时候,整个文档(文件)将在内存中非常好地和连续地存在(考虑在记事本中打开文本文件)。文件也可能完全像占位符一样被锁定,其中锁是最重要的,并且实际上没有加载任何文件。你真的需要知道很多关于文件锁定的进程。

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