【问题标题】:Write to file in C在 C 中写入文件
【发布时间】:2013-06-07 20:08:01
【问题描述】:

我在使用 C 将数据从一个文件传输到另一个文件时遇到问题,我希望社区提供一些帮助来帮助我解决一些输出问题。我这样做是因为我想接下来将 txt 数据转换为二进制数据。完全测试目的。

这是我目前的代码:

int txt2txt()
{
    FILE *pTextFile, *pBinaryFile;
    char buffer[1000];
    pTextFile = fopen ("AS001.txt","r");
    pBinaryFile = fopen("BS001.txt","w");
    while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}
fclose(pTextFile);
fclose(pBinaryFile);
return 0;
}

示例输入/输出:

AS001.txt:

91829812
1231231
1231232
123231123
1232312
123123123
12312312

并输出BS001.txt:

91829812
 „w  O]€©O]    * +  O] ¤O]H¨O] ¬O](     O]   @¨O]Lü( ¾8„w8O]š8„w¥ex      O]ˆ©O]  O]8¤O]          ¤O] ¤O]H¨O]`žO]H     O]    8¤O]œü( ¾8„w8O]š8„wuex      O]@¤O]   ЪO]Q      ø    H¨O]PO] ¬O]  O]PO]™Qº€O]PO]  D  Q  Q    ¬O]            Q   ˆ       p¨O] ¬O]Õqˆw¹Qºþÿÿÿ|O]   

【问题讨论】:

  • 尝试将pBinaryFile = fopen("BS001.txt","w");更改为pBinaryFile = fopen("BS001.txt","wb");
  • sizeof(int) 应该是 sizeof(char)。我也不明白你在做什么。使文件“二进制”主要意味着在大多数环境中删除文本回车控件。您使用的是什么操作系统?
  • 我使用的是window 7,这只是一个测试目的,感谢所有帮助:)
  • @BinayakaChakraborty,这不会有任何区别。
  • ... 而sizeof(char)1

标签: c input output


【解决方案1】:

这段代码:

while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}

尝试读取 1000 字节,然后在每次迭代中写入 1000 * sizeof(int) 字节。除非您的系统有 1 字节整数(不太可能),否则这可能不是您想要的。

除此之外,fgets 可能没有填满您的整个缓冲区 - 它停在换行符处。

用途:

while (fgets(buffer, 1000, pTextFile) != NULL)
{
    fwrite(buffer, 1, strlen(buffer), pBinaryFile);
}

编辑:既然你有问题,这里有一个完整的例子。一、源码:

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

int main(void)
{
    char buffer[1000];
    FILE *pTextFile = fopen("AS001.txt","r");
    FILE *pBinaryFile = fopen("BS001.txt","w");

    while (fgets(buffer, 1000, pTextFile) != NULL)
    {
        fwrite(buffer, 1, strlen(buffer), pBinaryFile);
    }

    fclose(pTextFile);
    fclose(pBinaryFile);

    return 0;
}

其次,构建并运行:

$ make example
cc     example.c   -o example
$ cat AS001.txt 
91829812
1231231
1231232
123231123
1232312
123123123
12312312

$ ./example 
$ diff AS001.txt BS001.txt 
$ 

【讨论】:

  • 感谢 Carl,但结果仍然相同,输出仍然是 91829812,后面跟着一堆 NULL 和奇怪的符号。当我试图在控制台上输出它时,它显示正确,但它在文本文件中表现得很奇怪。
  • 我对此表示怀疑;你一定有其他错误。如果你愿意,我可以在这里提供一个运行示例。
  • 可能与我的输入有关,还是您认为与我的window os字体有关?
  • 等待;您实际上不是在对文本文件进行操作吗?如果您做的事情与您的问题描述的不同,那么我的回答可能无效。不过,您可能应该问一个更好(更准确)的问题。
  • 如果输入在同一行,该程序运行良好,但是它后面总是有很多符号和 NULL。或者你可以说如果输入是由一个新的行分隔,那么数字之间的差距是由符号和 NULL 填充的,对不起,我听起来很菜。我正在使用 Notepad++ 打开 .txt 输出。
【解决方案2】:

包含标准库中的 string.h 并将您的写入命令更改为:

fwrite(buffer, sizeof(char), strlen(buffer), pBinaryFile);

这将阻止它尝试将垃圾数据写入缓冲区的其余部分,这是未定义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多