2013-01-06 96 views
-1

我想從使用C++的文件中提取一些整數,但我不確定自己是否正確地做了。C++從VB6讀取文件中的某些整數

我在VB6的代碼如下:

Redim iInts(240) As Integer 
Open "m:\dev\voice.raw" For Binary As #iFileNr 
Get #iReadFile, 600, iInts() 'Read from position 600 and read 240 bytes 

我轉換到C++是:

vector<int>iInts 
iInts.resize(240) 

FILE* m_infile; 
string filename="m://dev//voice.raw"; 

if (GetFileAttributes(filename.c_str())==INVALID_FILE_ATTRIBUTES) 
{ 
    printf("wav file not found"); 
    DebugBreak(); 
} 
else 
{ 
    m_infile = fopen(filename.c_str(),"rb"); 
} 

但現在我不知道如何從那裏繼續,我也不知道「rb」是否正確。

+2

我建議使用C++ I/O str Eams而不是低級API,操作符>>有幾個重載,這使得提取基本數據類型的值非常容易 –

+0

代碼中有很多特定於Windows的API。添加標籤。 –

+0

對VB語句的評論似乎是一種觸動。它讀取的是240 *字節*還是240 *整數*(或者可能是240個8位整數?)要知道如何寫出所寫的內容,您首先必須知道它是如何寫入的。 – WhozCraig

回答

1

我不知道如何VB讀取文件,但如果你需要從文件讀取嘗試整數:

m_infile = fopen(myFile, "rb") 
fseek(m_infile, 600 * sizeof(int), SEEK_SET); 
// Read the ints, perhaps using fread(...) 
fclose(myFile); 

或者你可以使用使用ifstream的 C++的方式。

與流完整的示例(注意,應添加錯誤檢查):

#include <ifstream> 

void appendInts(const std::string& filename, 
       unsigned int byteOffset, 
       unsigned int intCount, 
       const vector<int>& output) 
{ 
    std::ifstream ifs(filename, std::ios::base::in | std::ios::base::binary); 
    ifs.seekg(byteOffset); 
    for (unsigned int i = 0; i < intCount; ++i) 
    { 
     int i; 
     ifs >> i; 
     output.push_back(i); 
    } 
} 

... 

std::vector<int> loadedInts; 
appendInts("myfile", 600, 60, loadedInts); 
+0

您能否填寫您發表評論的地方?我對C++沒有經驗,這不是世界上最簡單的任務。 – tmighty

+0

檢查fread文檔,例如http://www.cplusplus.com/reference/cstdio/fread/。 或者再次使用C++方式處理流http://www.cplusplus.com/reference/fstream/ifstream/。 –

+0

我真的很好奇,並且會在發佈後查找我自己,但是在* binary *模式下打開的'ifstream'上,格式化提取操作符>> operator()的行爲究竟是什麼? – WhozCraig