首页 > 解决方案 > 关于 C 中的 fwrite() 错误

问题描述

读取文件并将数据乘以 2。之后,我编写了一个写入另一个文件的程序。该文件是一个 16 位文件。顺便说一句,创建的文件中只写入了一定数量。我不知道为什么会这样。请帮我。

C(视觉工作室 2017)

#define _CRT_SECURE_NO_WARNINGS
#define SIZE 16000
typedef short data_type;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {

    FILE *fd, *fd2;
    data_type *data;
    int n;

    data = (data_type*)malloc(sizeof(data_type) * SIZE);
    for (int i = 0; i < SIZE; i++)
        data[i] = 0;

    if ((fd = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono.pcm", "r")) == NULL)
        printf("Error opening file1");
    if ((fd2 = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono2.pcm", "w")) == NULL)
        printf("Error opening file2");

    n = fread(data, sizeof(data_type), SIZE, fd);

    for (int i = 0; i < SIZE; i++)
        data[i] = data[i] * 2.0;

    if (fwrite(data, sizeof(data_type), SIZE, fd2) != SIZE) {
        printf("Error writing to file.\n");
        exit(1);
    }

    fclose(fd);
    fclose(fd2);

    free(data);

    return 0;
}

标签: cfwrite

解决方案


可能是程序没有以二进制模式打开这两个文件。

例如:

FILE *fin = fopen("input_file.bin", "rb");  // <-- Note the "rb"

如果您的文件以默认的文本模式打开,如果数据中有 EOF 字符,则文件输入可能会过早关闭。

编辑:此外,当您的文件处理fd并且fd2为 NULL 时,您应该处理错误。您还没有检查其他一些错误情况,但我将这些作为练习留给读者。


推荐阅读