我想從檔案中加載位圖。位圖類我有一個字符指針指向一個文件名,然後加載它,如果它在同一個目錄中。位圖加載類已經過很好的測試,我不想惹得它太多。問題是它使用文件指針來加載並執行其所有文件操作。有沒有什麼辦法模擬一個文件指針,而實際上它是從內存中的塊中讀取的呢?仿真文件指針C++?
對不起,如果這是一個奇怪的問題。
我想從檔案中加載位圖。位圖類我有一個字符指針指向一個文件名,然後加載它,如果它在同一個目錄中。位圖加載類已經過很好的測試,我不想惹得它太多。問題是它使用文件指針來加載並執行其所有文件操作。有沒有什麼辦法模擬一個文件指針,而實際上它是從內存中的塊中讀取的呢?仿真文件指針C++?
對不起,如果這是一個奇怪的問題。
檢出John Ratcliff's File Interface替代標準文件I/O。它支持你需要的功能。
您仍然需要重構位圖加載代碼才能使用新界面。但是,此接口支持從磁盤上的文件或內存中的內存塊(以及寫入磁盤上的文件或擴展內存塊)加載。
感謝您的建議。我會研究這一點。 – 2011-05-01 23:15:51
這結束了完美的工作。謝謝。 – 2011-05-01 23:40:53
你很受歡迎。 – 2011-05-02 14:05:12
重構它並創建與之前完全相同的參數的函數:如果使用從磁盤讀取的fopen,fread和fseek,則創建從內存中讀取文件的mopen,mread和mseek。你只需要修復函數的名字。
它應該很容易沒有風險,最終代碼不會看起來像一個骯髒的黑客。
謝謝。我很感激。我會試試這個。 – 2011-05-01 12:22:40
您也可以使用管道。管道是您可以使用文件基元進行讀寫的內存塊。這基本上是你想要的
(假設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」。
不幸的是我不認爲Windows 7支持POSIX。不管怎麼說,還是要謝謝你! – 2011-05-01 23:41:17
你的意思是一個文件指針,如'FILE *',或...? – 2011-05-01 12:15:54
@Matti Virkkunen是的。一個文件* – 2011-05-01 12:17:12
只是爲了澄清,通過「一塊內存」,你的意思是你有一個'char *'指向某個緩衝區的某處? – 2011-05-01 12:28:07