-4

やや珍しい問題があります。私の前任者の設計により、27 MB のファイルがあり、100,000 番目のバイトなど、その中の特定のバイトを見つける必要があります。次に、100,000 バイト目から 150,000 バイト目までのすべてを削除する必要があります。

[END]ファイルは、ヘッダー ファイル (約 10,000 文字で終わる) と実際のデータ (すべてバイト形式) に分割されます。2700 万バイトは約 15000 行に分かれています。

どんな助けでも大歓迎です。

4

2 に答える 2

0

ファイル1をファイルにコピーして、seekgで不要な領域をスキップします。

//open the files:
ifstream fin("filename.ext",ios::in|ios::binary);
ofstream fout("filename.ext",ios::out|ios::binary);

size_t position = ?? ;// position in file
size_t size = ??; //size you want to read

char buffer[BUFFSIZE];
//go to position:
fin.seekg(position);

//read from position 
while(size > 0){
  fin.read(buffer, MIN(size, BUFFSIZE));
  size_t count;
  fout.write(buffer, count);
  size -= count; 
}
于 2013-10-16T18:36:54.547 に答える
0

あなたの場合の1つの解決策(スペースの使用に厳密な制限がない限り)は、ファイルを必要のない別のスキップバイトにコピーすることです。n 番目のバイトをカウントする方法によっては、ファイルをバイナリ モードで開く必要がある場合があります。ソースファイルの名前を変更して、元の名前で新しいファイルを一時的に開き、実際のコピーを実行してソースを削除することができます。または、コンテンツを一時ファイルにコピーしてから、元のファイルを削除し、一時ファイルの名前を元の名前に変更することもできます。ディスク容量に制限がある場合は、残りのファイル (例では 150,000 番目から最後まで) を保存できます。元のファイルを 100,000 番目に切り捨ててから、残りをコピーして戻します。

于 2013-10-16T18:32:18.850 に答える