2011-05-01 67 views
2

我想從檔案中加載位圖。位圖類我有一個字符指針指向一個文件名,然後加載它,如果它在同一個目錄中。位圖加載類已經過很好的測試,我不想惹得它太多。問題是它使用文件指針來加載並執行其所有文件操作。有沒有什麼辦法模擬一個文件指針,而實際上它是從內存中的塊中讀取的呢?仿真文件指針C++?

對不起,如果這是一個奇怪的問題。

+0

你的意思是一個文件指針,如'FILE *',或...? – 2011-05-01 12:15:54

+0

@Matti Virkkunen是的。一個文件* – 2011-05-01 12:17:12

+0

只是爲了澄清,通過「一塊內存」,你的意思是你有一個'char *'指向某個緩衝區的某處? – 2011-05-01 12:28:07

回答

2

檢出John Ratcliff's File Interface替代標準文件I/O。它支持你需要的功能。

您仍然需要重構位圖加載代碼才能使用新界面。但是,此接口支持從磁盤上的文件或內存中的內存塊(以及寫入磁盤上的文件或擴展內存塊)加載。

+0

感謝您的建議。我會研究這一點。 – 2011-05-01 23:15:51

+0

這結束了完美的工作。謝謝。 – 2011-05-01 23:40:53

+0

你很受歡迎。 – 2011-05-02 14:05:12

5

重構它並創建與之前完全相同的參數的函數:如果使用從磁盤讀取的fopen,fread和fseek,則創建從內存中讀取文件的mopen,mread和mseek。你只需要修復函數的名字。

它應該很容易沒有風險,最終代碼不會看起來像一個骯髒的黑客。

+0

謝謝。我很感激。我會試試這個。 – 2011-05-01 12:22:40

4

您也可以使用管道。管道是您可以使用文件基元進行讀寫的內存塊。這基本上是你想要的

(假設POSIX操作系統)

創建管道:

int p[2]; 
pipe(p); 

使用fdopen()打開管道文件描述符成FILE*

FILE *emulated_file = fdopen(p[0], "r"); 

然後寫任何你想要的管道寫入結束:

write(p[1], 17 ,"whatevereyouwant"); 

現在:

buf[32]; 
fread(&buf,1,32, emulated_file); 
cout<<buf<<endl; 

威爾·輸出 「whateveryouwant」。

+0

不幸的是我不認爲Windows 7支持POSIX。不管怎麼說,還是要謝謝你! – 2011-05-01 23:41:17