复制使用FREAD和fwrite二进制文件 [英] Copying binary files using fread and fwrite

查看:256
本文介绍了复制使用FREAD和fwrite二进制文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用复制二进制文件时,我有一个问题 FREAD FWRITE
环路仅运行两次(40个字节),但该文件长度是160字节

 的#include<&string.h中GT;
#定义PER_READ 30
INT主要(无效)
{    字符缓冲区[500] = {0};
    FILE * CSV =的fopen(CSV.csv,RB);
    FILE * csvDest =的fopen(CSVDest.csv,世行);
    unsigned int类型成品= 0;
    无符号整型计数器= 0;
    做
    {
        成品= FREAD(缓冲区的sizeof(字符*),PER_READ,CSV); //从CSV阅读所有以一个字符串名称缓冲区
        成品+ = PER_READ *计数器;
        反++;
    }而(完== PER_READ *计数器);
    FWRITE(缓冲区的sizeof(字符*),成品,csvDest); //写入所有到一个文件CSVDest    系统(暂停);
    返回(0);
};


解决方案

 的#include<&string.h中GT;
#包括LT&;&stdio.h中GT;
#定义PER_READ 30
INT主要(无效)
{
    字符缓冲区[500] = {0};
    FILE * CSV =的fopen(CSV.csv,RB);
    FILE * csvDest =的fopen(CSVDest.csv,世行);
    unsigned int类型成品= 0;
    无符号整型计数器= 0;
    unsigned int类型numBlocksRead = 0;
    做
    {
        numBlocksRead = FREAD(缓冲区的sizeof(炭),PER_READ,CSV);
        成品+ = numBlocksRead * sizeof的(字符);
        反++;
        FWRITE(缓冲区的sizeof(炭),numBlocksRead,csvDest);    }而(完== PER_READ *计数器);    FCLOSE(CSV);
    FCLOSE(csvDest);
    系统(暂停);
    返回(0);
}

I have a problem when copying binary files using fread and fwrite: the loop runs only two times (40 bytes), but the file length is 160 bytes:

#include <string.h>
#define PER_READ 30
int main(void)
{

    char buffer[500] = { 0 };
    FILE* CSV = fopen( "CSV.csv", "rb" );
    FILE* csvDest = fopen( "CSVDest.csv", "wb" );
    unsigned int finished = 0;
    unsigned int counter = 0;
    do
    {
        finished = fread( buffer, sizeof( char*), PER_READ, CSV );//Read all from CSV to a string name buffer
        finished += PER_READ * counter;
        counter++;
    } while (finished == PER_READ * counter);
    fwrite( buffer, sizeof( char* ), finished, csvDest );// write all to a the file CSVDest

    system( "PAUSE" );
    return (0);
};

解决方案

    #include <string.h>
#include <stdio.h>
#define PER_READ 30
int main( void )
{
    char buffer[500] = { 0 };
    FILE* CSV = fopen( "CSV.csv", "rb" );
    FILE* csvDest = fopen( "CSVDest.csv", "wb" );
    unsigned int finished = 0;
    unsigned int counter = 0;
    unsigned int numBlocksRead = 0;
    do
    {
        numBlocksRead = fread( buffer, sizeof( char ), PER_READ, CSV );
        finished += numBlocksRead*sizeof( char );
        counter++;
        fwrite( buffer, sizeof( char ), numBlocksRead, csvDest );

    } while (finished == PER_READ * counter);

    fclose( CSV );
    fclose( csvDest );
    system( "PAUSE" );
    return (0);
}

这篇关于复制使用FREAD和fwrite二进制文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆