C
Ja, read erwartet auch einen Datenblock von genau der angegebenen Größe - und scheitert, wenn es am Ende einen unvollständigen Datenblock übergeben bekommt. Vielleicht solltest du dir mal readsome() ansehen:
std::streamsize size;
while( size=source_file1.readsome(data,sizeof(data)) , source_file1 )//ja ich weiß, diese Bedingung ist ein wenig tricky
{
if(copy_to_target1)
target_file1.write(data, size);
if(copy_to_target2)
target_file2.write(data, size);
if(copy_to_target3)
target_file3.write(data, size);
}