在另一台计算机MFC C++上不进入while循环

Not going into while loop on another computer - MFC C++

本文关键字:C++ 循环 while MFC 计算机 一台      更新时间:2023-10-16

我制作了一个程序,其功能是读取一个每毫秒24/7更新的.log文件。

我不会详细介绍这个程序是如何工作的,因为这将是一篇很长的文章,所以这里有一个总结:-

我的程序的作用:-

1) 有一个配置文件,用户可以更改变量,如time_interval和

2) 用户输入5分钟(或他们希望的频率)并运行我的程序,然后我的程序将在5分钟结束时扫描所述文本文件,然后在5分钟后再次扫描。

3) 它检查文本文件中的某些标志,并在更改值时进行记录

4) 然后将其打印到.csv文件中

最后,这是我要求的一个程序,用于简化机器的数据库跟踪,该机器将其组件上的数据记录在文本文件中(通过/失败)

问题

这个程序在我制作的电脑(Windows7)上运行得很完美,我在另一台运行Windows2000的电脑上进行了测试。

当我把这个程序传递给在Windows XP上运行它的客户端时,它似乎不会进入我设置的while循环。

我的代码

void CSerco_Parser_ToolDlg::Read_Log()
{
int result;
char ReadLogLine[100000] = "";
CString LogPathName;
FILE *readLOG_fp;
LogPathName = Source_Folder + "\Test.log";
readLOG_fp = fopen(LogPathName, "a+t");
MessageBox("Before While Loop");
while ((result = fscanf(readLOG_fp, "%[^n]n", ReadLogLine)) != EOF) // Loops through the fil till it reaches the end of file
{
CurrLine = ReadLogLine;
if ((first_run) && (first_run_check))
{
MessageBox("first run true, first run check true");
CurrLine_Final = CurrLine;
Sort_Array();  // I have MessageBoxes in this to tell me that I have went into this function
Comp_State();  // I have MessageBoxes in this to tell me that I have went into this function
}
else
{
MessageBox("not hitting anything");
}
}
fclose(readLOG_fp);
GenerateCSV();  // I have MessageBoxes in this aswell

}

排序阵列功能

在这篇文章中,我基本上将从.log文件中读取的当前行排序为它自己的数组

Comp State函数

在这篇文章中,我将存储在Sort array中的数组中的值进行比较,如果不同,我将差异存储到另一个数组中以打印

生成CSV函数

顾名思义,这是将差异打印到.csv文件中。

最终问题

当我在电脑上正常运行它时,它会完美地将所有差异打印到.csv文件中,并显示我正确设置的所有消息框。

但是当客户端在他的计算机上运行它时,它无法进入这个while循环

while ((result = fscanf(readLOG_fp, "%[^n]n", ReadLogLine)) != EOF)

并打印出

MessageBox("Before While loop");

并随后跳转到此功能

GenerateCSV();

由于它没有经过while循环,所以没有任何存储到要打印的数组中的内容。因此,导致程序什么都不做。

问题

它为什么要这么做?

它不应该是特定于操作系统的,因为与XP相比,我在一个旧的操作系统上测试了它。

这不是我确定的文件是空的。(双重检查,三次检查…)

它不是.log文件的路径名。(再次进行双重、三重检查等)

这不是由于特权(询问我的客户)

我唯一能想到的是,由于某种原因,它会进入.log文件并直接跳到EOF。但是,当我在自己的电脑上测试它时,为什么它能完美地工作呢。

如果它没有进入while循环,而它必须进入,因为对fscanf的调用正在返回EOF

你检查过电话吗:

readLOG_fp = fopen(LogPathName, "a+t");

实际返回的是有效的文件指针吗?如果是,请首先检查文件是否为空。

您可能还需要检查权限。日志文件可能存在,但您的程序可能没有打开它的权限。