Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用write()复制二进制文件时,复制文件的大小会增加 #包括 #包括 #包括 班级简介 { public:char*copyBytes; }p; void main() { 无符号整数大小; fstream文件(“file.mp3”,ios::binary | ios::in | ios::out); fstream copy(“copy.mp3”,ios::binary | ios::in | ios::out); seekg(0,ios::end); size=file.tellg(); 文件.seekg(0); 而(!file.eof()) { p、 copyBytes=(字符*)malloc(大小); file.read((char*)p.copyBytes,大小); copy.write((char*)p.copyBytes,大小); 免费(p.copyBytes); } file.close(); }_C++_Binaryfiles - Fatal编程技术网

C++ 使用write()复制二进制文件时,复制文件的大小会增加 #包括 #包括 #包括 班级简介 { public:char*copyBytes; }p; void main() { 无符号整数大小; fstream文件(“file.mp3”,ios::binary | ios::in | ios::out); fstream copy(“copy.mp3”,ios::binary | ios::in | ios::out); seekg(0,ios::end); size=file.tellg(); 文件.seekg(0); 而(!file.eof()) { p、 copyBytes=(字符*)malloc(大小); file.read((char*)p.copyBytes,大小); copy.write((char*)p.copyBytes,大小); 免费(p.copyBytes); } file.close(); }

C++ 使用write()复制二进制文件时,复制文件的大小会增加 #包括 #包括 #包括 班级简介 { public:char*copyBytes; }p; void main() { 无符号整数大小; fstream文件(“file.mp3”,ios::binary | ios::in | ios::out); fstream copy(“copy.mp3”,ios::binary | ios::in | ios::out); seekg(0,ios::end); size=file.tellg(); 文件.seekg(0); 而(!file.eof()) { p、 copyBytes=(字符*)malloc(大小); file.read((char*)p.copyBytes,大小); copy.write((char*)p.copyBytes,大小); 免费(p.copyBytes); } file.close(); },c++,binaryfiles,C++,Binaryfiles,此程序复制二进制文件file.mp3。原始二进制文件(file.mp3)为2.13 MB,复制的文件(copy.mp3)为2.14 MB。为什么? 当(!file.eof())时,您永远不希望使用类似于的循环。相反,检查读取操作是否成功,例如: #include<fstream.h> #include<conio.h> #include<alloc.h> class profile { public: char *copyBytes; }p; voi

此程序复制二进制文件file.mp3。原始二进制文件(file.mp3)为2.13 MB,复制的文件(copy.mp3)为2.14 MB。为什么?

  • 当(!file.eof())时,您永远不希望使用类似于
    的循环。相反,检查读取操作是否成功,例如:

    #include<fstream.h>
    #include<conio.h>
    #include<alloc.h>
    
    class profile
    {
       public: char *copyBytes;
    }p;
    
    void main()
    {
       unsigned int size;
    
       fstream file ("file.mp3", ios::binary | ios::in | ios::out);
       fstream copy ("copy.mp3", ios::binary | ios::in | ios::out);
       file.seekg(0, ios::end);
       size=file.tellg();
       file.seekg(0);
    
       while(!file.eof())
       {
        p.copyBytes=(char*)malloc(size);
        file.read((char*)p.copyBytes, size);
        copy.write((char*)p.copyBytes, size);
        free(p.copyBytes);
       }
    
       file.close();
    
    }
    
    eof标志可能仅由下一次读取操作设置,因此在读取之前检查它是没有帮助的

  • 您总是将整个缓冲区写入输出文件,但是
    read
    可能只读取缓冲区的一部分。使用
    file.gcount()
    查看读取了多少字节

  • 请注意,缓冲区大小不需要与文件大小相同-这对于内存中不适合的文件不起作用。您可以简单地使用一个恒定大小的缓冲区。循环将负责复制整个文件

  • 当(!file.eof())时,您永远不希望使用类似于
    的循环。相反,检查读取操作是否成功,例如:

    #include<fstream.h>
    #include<conio.h>
    #include<alloc.h>
    
    class profile
    {
       public: char *copyBytes;
    }p;
    
    void main()
    {
       unsigned int size;
    
       fstream file ("file.mp3", ios::binary | ios::in | ios::out);
       fstream copy ("copy.mp3", ios::binary | ios::in | ios::out);
       file.seekg(0, ios::end);
       size=file.tellg();
       file.seekg(0);
    
       while(!file.eof())
       {
        p.copyBytes=(char*)malloc(size);
        file.read((char*)p.copyBytes, size);
        copy.write((char*)p.copyBytes, size);
        free(p.copyBytes);
       }
    
       file.close();
    
    }
    
    eof标志可能仅由下一次读取操作设置,因此在读取之前检查它是没有帮助的

  • 您总是将整个缓冲区写入输出文件,但是
    read
    可能只读取缓冲区的一部分。使用
    file.gcount()
    查看读取了多少字节

  • 请注意,缓冲区大小不需要与文件大小相同-这对于内存中不适合的文件不起作用。您可以简单地使用一个恒定大小的缓冲区。循环将负责复制整个文件