我想要通過讀取數據塊來複制文件,發送它並將它重新放回到一起。發送不是問題的一部分,所以我把它放在代碼中。它應該可以處理任何類型的文件和任意的piece_lengths。拆分文件並將其放回到一起C++
這只是一個前期階段。最後的數據塊不應該順序選擇,而是隨機選擇。在接收另一個數據塊之間可能會有一段時間。
我知道這個例子只有在size % piece_length != 0
纔有意義。
我得到與另一端的原始文件大小相同的文件。 有沒有人看到這個問題?
int main()
{
string file = "path/test.txt"
string file2 = "path2/test.txt";
std::ifstream infile (file.c_str() ,std::ifstream::binary);
//get size of file
infile.seekg (0,infile.end);
long size = infile.tellg();
infile.seekg (0);
size_t piece_length = 5;
for (int i = 0; i < ((size/piece_length) + 1); i++)
{
if (i != (size/piece_length))
{
std::ifstream infile (file.c_str() ,std::ifstream::binary);
infile.seekg((i * piece_length) , infile.beg);
char* buffer = new char[piece_length];
infile.read(buffer, piece_length);
infile.close();
std::ofstream outfile (file2.c_str() ,std::ofstream::binary);
outfile.seekp((i * piece_length), outfile.beg);
outfile.write(buffer, piece_length);
outfile.close();
}
else
{
std::ifstream infile (file.c_str() ,std::ifstream::binary);
infile.seekg((i * piece_length) , infile.beg);
char* buffer = new char[size % piece_length];
infile.read(buffer, size % piece_length);
infile.close();
std::ofstream outfile (file2.c_str() ,std::ofstream::binary);
outfile.seekp((i * piece_length), outfile.beg);
outfile.write(buffer, size % piece_length);
outfile.close();
}
}
return 0;
}
爲什麼不先讀整個文件,然後從內存中將東西分塊? – 2013-03-11 12:12:24
首先它可能是一個非常大的文件,seconde可能在發送兩個塊之間有很多時間。 – user2156561 2013-03-11 12:16:04