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

时间:2014-02-21 08:41:21

标签: c++ mfc

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

我不会详细介绍该计划的工作方式,因为这将是一篇很长的文章,所以这里有一个摘要: -

我的计划的作用: -

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

2)用户放入5分钟(或者他们想要的频率)并运行我的程序,然后我的程序将在5分钟后扫描所述文本文件,然后在另外5分钟后再次扫描。

3)它检查文本文件中的某些标志,如果它改变值

则记录它

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

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

问题

这个程序在我制作的计算机上完美运行(Windows 7),我在另一台计算机上测试它以及运行Windows 2000。

当我将此程序传递给在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 ((result = fscanf(readLOG_fp, "%[^\n]\n", ReadLogLine)) != EOF)

并打印出来

MessageBox("Before While loop");

然后跳转到此功能

GenerateCSV();

并且因为它没有通过while循环,所以没有任何东西存储到数组中以便打印出来。因此,导致程序没有做任何事情。

问题

为什么要这样做?

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

因为我确定它不是文件是空的。 (仔细检查,三重检查......)

它不是.log文件的路径名。 (再次加倍,三重检查等)

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

我唯一可以想到的是,由于某种原因,它会进入.log文件并直接跳转到EOF。但是,当我在自己的计算机上测试它时,为什么它能正常工作。

1 个答案:

答案 0 :(得分:1)

如果因为对while的调用正在返回fscanf而未进入EOF循环,那么

您是否检查过该电话:

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

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

您可能还想检查权限。日志文件可能存在,但您的程序可能无权打开它。