2013-11-26 244 views
-1

如何在C++中的char數組中逐行讀取二進制文件? 這樣的:二進制C++中的文件讀取

struct packet 
{ 
    unsigned int ack; 
    char data[994]; 
    int sequence_number; 
    unsigned long checksum; 
    int lenghtFile; 
}dummy; 

fstream file1; 
file1.open("filename.txt",ios::binary); 

if(!file1) 
{ 
    cout<<"\n error opening file \n"; 
} 
else 
{ 
    while(1) 
    { 
     if(file1.eof()!=0) 
      {break;} 
     else 
     {// 
      file1.read(dummy.data,994); 
      sendto(connfd,(struct packet*)&dummy,sizeof(struct packet),0, 
        (sockaddr*)&server,sizeof(server)); 
     } 
    } 
} 
+0

如何被存儲在文本文件中的數據? – woolstar

+1

什麼不適合你? – jxh

+0

'二進制行文件'我現在停止閱讀了。 –

回答

0

此:

while(1) 
{ 
    if(file1.eof()!=0) 
     {break;} 
    else 
    {// 
     file1.read(dummy.data,994); 
     sendto(connfd,(struct packet*)&dummy,sizeof(struct packet),0,(sockaddr   *)&server,sizeof(server)); 
    } 

...看起來像它的作品了作爲基本模擬while (!file1.eof()),很多答案談論本質上是有保證的問題的長篇大論方式。我可能會寫爲:

while (file1.read(...)) 
    sendto(...); 

我想,但是,我想更進一步,和過載至少operator>>(以及可能operator>>)爲packet類型:

struct packet { 
    // ... 

    friend std::istream &operator>>(std::istream &is, packet &p) { 
     return is.read(p.data, sizeof(p.data)); 
    } 

    // and possibly:  
    friend UDP_iterator operator<<(udp_iterator &c, packet &p) { 
     return sendto(c.fd, &p, sizeof(p), 0, c.server, sizeof(c.server)); 
    } 
}; 

...其中udp_iterator將類似於ostream_iterator,但會寫入套接字而不是流。請注意,有許多類似的課程。大多數提供了一個連接到TCP套接字的流緩衝類,但是UDP套接字不應該增加任何困難。

有了這些正確超載,你應該能夠將數據從文件像這樣的東西複製到插座:

std::copy(std::istream_iterator<packet>(file1), 
      std::istream_iterator<packet>(), 
      UDP_iterator<packet>(server));