C++ 不进入另一台计算机上的while循环-MFC++;
我制作了一个程序,其功能是读取一个.log文件,该文件每毫秒24/7更新一次 我不打算详细介绍该计划是如何运作的,因为这将是一篇很长的文章,所以这里是一个总结:- 我的程序的功能:- 1) 有一个配置文件,用户可以更改变量,如时间间隔等 2) 用户输入5分钟(或任意频率)并运行我的程序,我的程序将在5分钟结束时扫描所述文本文件,然后在另外5分钟后再次扫描 3) 它检查文本文件中的某些标志,并在更改值时记录这些标志 4) 然后将其打印到.csv文件中 最后,这是我要求的一个程序,用于简化计算机的数据库跟踪,该计算机将其组件上的数据记录在文本文件中(通过/失败) 问题 这个程序在我在(Windows7)中制作的计算机上完美运行,我在另一台运行Windows2000的计算机上测试了它 当我将此程序传递给在Windows XP上运行它的客户端时,它似乎没有进入我设置的while循环 我的代码C++ 不进入另一台计算机上的while循环-MFC++;,c++,mfc,C++,Mfc,我制作了一个程序,其功能是读取一个.log文件,该文件每毫秒24/7更新一次 我不打算详细介绍该计划是如何运作的,因为这将是一篇很长的文章,所以这里是一个总结:- 我的程序的功能:- 1) 有一个配置文件,用户可以更改变量,如时间间隔等 2) 用户输入5分钟(或任意频率)并运行我的程序,我的程序将在5分钟结束时扫描所述文本文件,然后在另外5分钟后再次扫描 3) 它检查文本文件中的某些标志,并在更改值时记录这些标志 4) 然后将其打印到.csv文件中 最后,这是我要求的一个程序,用于简化计算机的数
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文件读取的当前行排序到它自己的数组中
组件状态功能
在本例中,我将存储在Sort数组中的值与数组中的值进行比较,如果不同,则将差异存储到另一个数组中进行打印
生成CSV功能
顾名思义,这是将差异打印到.csv文件中
最后一道题
当我在电脑上正常运行时,它会将所有差异完美地打印到一个.csv文件中,并显示我正确设置的所有消息框
但是当客户机在他的计算机上运行它时,它无法进入这个while循环
while ((result = fscanf(readLOG_fp, "%[^\n]\n", ReadLogLine)) != EOF)
然后打印出来
MessageBox("Before While loop");
然后跳到这个函数
GenerateCSV();
由于它没有经过while循环,所以数组中没有存储要打印的内容。因此,导致程序什么都不做
问题
为什么要这样做
它不应该是特定于操作系统的,因为与XP相比,我在旧操作系统上测试了它
并不是我确定的文件是空的。(双重检查,三重检查…)
它不是.log文件的路径名。(再次进行双重、三重检查等)
这不是由于特权(询问我的客户)
我唯一能想到的是,出于某种原因,它会进入.log文件并直接跳到EOF。但为什么我在自己的电脑上测试它时它工作得很好呢 如果由于调用
fscanf
返回EOF
而必须进入while
循环,则返回EOF
您是否检查过电话:
readLOG_fp = fopen(LogPathName, "a+t");
是否实际返回了有效的文件指针?如果是,则首先检查文件是否为空
您可能还希望检查权限。日志文件可能存在,但您的程序可能没有打开它的权限。您是否检查了客户端日志文件,确认其正确且不为空?基本问题:您是否在XP机器上重新编译?你有XP机器上的Source_文件夹吗?是的,我有。我尝试使用一个test.log文件以及我自己定义的值,这样我就可以确保不是客户机日志文件出了问题。为什么,如果你只想读取该文件,你要以
“a+”
模式打开它?我每天结束时都将其作为+打开,我将更改文件名,然后创建一个具有确切名称的新文件。例子。在一天结束时,我会将名称serco.log更改为serco.log。[DATE],然后创建一个名为serco.logOk的新.log文件,了解它是returninf EOF,这就是为什么它不会进入while循环。文件肯定不是空的。我怀疑我的程序可能没有打开该文件的权限,因此我创建了自己的test.log文件,其中包含了我自己的值,它在我的计算机上以及在运行旧操作系统的其他一些计算机上都可以正常工作。为什么它不能只在客户端计算机上工作?