繁体   English   中英

无法从c程序编写的文本文件中读取数据

[英]Can't read data from text file written by c program

我正在尝试将收到的数据包数写入文本文件:

printf("TCP : %d   UDP : %d   ICMP : %d   IGMP : %d   Others : %d   Total : %d\r", tcp , udp , icmp , igmp , others , total);
if (usePacketCount == 1){
    fprintf(stderr,"Saving packet count");
    fprintf(packetCountFile,"TCP : %d   UDP : %d   ICMP : %d   IGMP : %d   Others : %d   Total : %d\r", tcp , udp , icmp , igmp , others , total);
}

当我运行程序时,我清楚地在代码中达到了这一点: 在此处输入图像描述

但是,当我尝试读取文本文件时,没有任何内容:

在此处输入图像描述

我在这里定义我的文件:

FILE *packetCountFile = 0;

if (usePacketCount == 1){
    printf("Using Packet Count File");
    packetCountFile = fopen("packetCount.txt","w");
}

我不确定为什么会失败。 可能是因为写入处于循环状态,根本跟不上?

首先,始终检查fopenfprintf的返回值是否失败。 其次,文本编辑器显示 0 行和 898964 个字符。 东西。

发生了什么?

提供给fprintf的格式字符串以回车符 ( \r ) 结尾,这会导致fprintf写入并重复覆盖第一行。

好的,但为什么第一行没有出现在文本编辑器中?

这取决于系统和文本编辑器,但可能发生的是文本编辑器显示文本行。 POSIX 定义一行如下

零个或多个非<newline> 字符加上一个终止<newline> 字符的序列。

由于fprintf没有打印换行符,因此从技术上讲,该文件不包含一行。
一些文本编辑器比其他编辑器更宽松,实际上可能会显示一些内容。

您的问题: “这可能是由于写入处于循环中,它根本跟不上?”

如果系统跟不上,您会认为fprintf会失败或写入速度很慢。

我该如何解决这个问题?

将回车符 ( \r ) 替换为换行符 ( \n ),这可能是您最初要写的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM