Так ! Тебе нужно узнать размер файла ! (для 1 байтной кодировки )
int GetSizeFile(const char * filename)
{
	std::ifstream file(filename, std::ios_base::binary);
	int size = 0;
	
	file.seekg(0, std::ios_base::end);
	size = (int)file.tellg();
	
	return size;
}
Теперь ты узнал размер файла! И можешь все-таки написать свою функцию или метод где ты будешь с помощью метода seekg прыгать по файлу
А вот метод для копирования ! Кстати метод канонический !
bool CopyFiles(const char * pathWithName, const char * outputPathAndName)
{
	std::ifstream in(pathWithName, std::ios::in | std::ifstream::binary);
	std::ofstream out(outputPathAndName, std::ios::out| std::ofstream::binary);
	
	if (!in)
		return false;
	if (!out)
		return false;
	const int bufSize = 4096;
	char * buffer = new char[bufSize];
	
	while (!in.eof())
	{
			in.read(buffer, bufSize);
			if (in.gcount())
				out.write(buffer, in.gcount());
	}
	
	delete[] buffer;
	return true;
}