关于 C 中的 fwrite() 错误
About fwrite() errors in C
读取文件并将数据乘以2。之后,我写了一个
写入另一个文件的程序。该文件是一个 16 位文件。经过
顺便说一句,只有一定数量被写入创建的文件。我愿意
不知道为什么会这样。请帮助我。
C (visual studio 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;
}
可能是程序没有以 binary 模式打开这两个文件。
例如:
FILE *fin = fopen("input_file.bin", "rb"); // <-- Note the "rb"
如果您的文件以 text 模式(默认)打开,如果数据中有 EOF 字符,文件输入可能会过早关闭。
编辑:此外,当您的文件句柄 fd
和 fd2
为 NULL 时,您应该处理错误。还有一些您没有检查的其他错误情况,但我将这些作为练习留给 reader.
读取文件并将数据乘以2。之后,我写了一个 写入另一个文件的程序。该文件是一个 16 位文件。经过 顺便说一句,只有一定数量被写入创建的文件。我愿意 不知道为什么会这样。请帮助我。
C (visual studio 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;
}
可能是程序没有以 binary 模式打开这两个文件。
例如:
FILE *fin = fopen("input_file.bin", "rb"); // <-- Note the "rb"
如果您的文件以 text 模式(默认)打开,如果数据中有 EOF 字符,文件输入可能会过早关闭。
编辑:此外,当您的文件句柄 fd
和 fd2
为 NULL 时,您应该处理错误。还有一些您没有检查的其他错误情况,但我将这些作为练习留给 reader.