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

问题描述:

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

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

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

+0

文件没有“内存地址”,所以它非常不清楚你要问什么。 'fopen()'打开文件并返回一个** FILE指针**。 – 2014-11-15 00:13:44

+0

正在使用的文件可以打开,具体取决于打开文件的任何进程所放置的锁。你知道它是否锁定共享阅读? – Grantly 2014-11-15 00:13:46

+0

@Ken White,也许我有错误的术语,我试图找到文件在内存中的位置。 – Alter 2014-11-15 00:15:14

@通过查找锁定文件的进程的Process ID,可以找到某处......您可能能够将内存中的文件内容作为分配给进程的内存空间的一部分进行跟踪。

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

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