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

C 如何在不打开文件的情况下从文件路径获取内存地址,c,windows,filesystems,C,Windows,Filesystems,我有一份档案。我知道它的文件路径,我想知道它的内存地址。我的问题是,我实际上无法打开该文件(fopen无法使用,因为操作系统认为该文件正在使用)以获取其内存地址 前。 fopen(“C:/example/file”,“r”)返回null 从我的理解来看,操作系统在确认文件未被使用后返回内存地址。那么,甚至可以通过步进操作系统吗?@Alter通过查找文件上有锁的进程的进程ID,您可以找到某个地方。。。作为分配给进程的内存空间的一部分,您可以跟踪内存中的文件内容 但是,文件被锁定并不意味着文件在内存

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

前。
fopen(“C:/example/file”,“r”)
返回null


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

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

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


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

文件没有“内存地址”,因此您的要求非常不明确
fopen()
打开文件并返回文件指针。可以打开正在使用的文件,具体取决于打开该文件的任何进程对其设置的锁。你知道它是否为共享读取而锁定吗?这是没有意义的部分。在您成功打开文件并读取内容之前,文件没有“内存中的位置”。在此之前,它们不在“内存中”。文件基本上不在内存中。它们在某种磁盘或目录上,内存不知道它们在那里。当它们被加载到内存中时,情况就不同了——然后它们的内容在内存中,文件也仍然在磁盘上。文件开始的物理位置通常相对不变(除了在许多情况下会发生更改),但它是一个物理存储地址。内存中的文件内容几乎可以有任何随机地址,也就是内存地址。如果文件是由另一个进程以独占方式打开的,则无法打开它以将其加载到内存中。“独家”的意思是“仅限我-我不会与你分享”。除了打开它,你不能以任何其他方式访问它,如果打开它被明确拒绝,那么你是在浪费时间。