转载:https://www.jb51.net/article/147896.htm
实际上就是以二进制形式打开文件,将数据保存到内存,在以二进制形式输出到指定文件。因此对于有图片的文件,也可以用这种方法复制其内容
1 #include<iostream> 2 3 using namespace std; 4 5 void main(void) 6 { 7 //保存输入图像文件名和输出图像文件名 8 char InImgName[10]; 9 char OutImgName[10]; 10 //图像数据长度 11 int length; 12 //文件指针 13 FILE* fp; 14 //输入要读取的图像名 15 cout << "Enter Image name:"; 16 cin >> InImgName; 17 //以二进制方式打开图像 18 if ((fp = fopen(InImgName, "rb")) == NULL) 19 { 20 21 cout << "Open image failed!" << endl; 22 exit(0); 23 } 24 //获取图像数据总长度 25 fseek(fp, 0, SEEK_END); 26 length = ftell(fp); 27 rewind(fp); 28 //根据图像数据长度分配内存buffer 29 char* ImgBuffer = (char*)malloc(length* sizeof(char)); 30 //将图像数据读入buffer 31 fread(ImgBuffer, length, 1, fp); 32 fclose(fp); 33 //输入要保存的文件名 34 cout << "Enter the name you wanna to save:"; 35 cin >> OutImgName; 36 //以二进制写入方式 37 if ((fp = fopen(OutImgName, "wb")) == NULL) 38 { 39 cout << "Open File failed!" << endl; 40 exit(0); 41 } 42 //从buffer中写数据到fp指向的文件中 43 fwrite(ImgBuffer, length, 1, fp); 44 cout << "Done!" << endl; 45 //关闭文件指针,释放buffer内存 46 fclose(fp); 47 free(ImgBuffer); 48 }