2014-11-15 28 views
-1

我有一個文件。我知道它的文件路徑,我想知道它的內存地址。我的問題是,我實際上無法打開文件(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

回答

1

@通過查找鎖定文件的進程的Process ID,可以找到某處......您可能能夠將內存中的文件內容作爲分配給進程的內存空間的一部分進行跟蹤。

但是,僅僅因爲文件被鎖定並不意味着文件在內存中。有時只使用文件的一部分,就像DLL中的函數一樣 - 只有文件的'used'和必要的塊將存儲在內存中。其他時候,整個文檔(文件)將在內存中非常好地連續存在(考慮在記事本中打開的文本文件)。文件也可能是純粹像佔位符一樣被鎖定的,其中鎖是所有重要的,並且實際上沒有文件被加載。你真的需要知道很多關於鎖定文件的進程。

現在,如果您只是想將文件複製到另一個文件,然後在「進程」鎖定文件之前啓動副本。您可以嘗試一個在Windows啓動時運行的批處理文件 - 並查看是否足夠早以便在鎖定文件之前複製該文件。

相關問題