基本上,我正在为要记录失败和成功的一系列测试创建错误日志。错误日志是 .csv 文件。基本上,该程序正在获取测试列表,例如它们被命名为#testlist.txt。在每个#testlist.txt中都有一系列测试。
例如,
#testlist.txt包含:
个Test1.txt
的test2.txt
Test3.txt
在Test1.txt中,有3个子测试。这些子测试可能失败或成功;因此,成功和失败率。因此,此错误日志报告的是每个测试的统计信息,以及使用#testlist进行的所有测试的全局成功和失败率。
我的任务是将#testlist的统计信息放在列表顶部而不是底部。 问题是:在打印完所有单独的测试统计信息后,我不知道如何重定向到文件顶部,以便将全局统计信息打印到.csv文件。
我在 Visual Basic 2008 中使用 C ++ 。任何建议都会非常有帮助!非常感谢你!
所以这可能看起来像一个愚蠢的问题,但我去MSDN查找SetFilePointer,这是我的同事建议我尝试的,但它没有理解为什么它不能在我的代码中工作。 / p>
if (SetFilePointer(m_pDlg->sumLog,0,NULL,FILE_BEGIN) != INVALID_SET_FILE_POINTER){
fprintf(m_pDlg->sumLog, "\n\n%s,%s,%d,%d,%d,%0.2f%%,%0.2f%%", pDlg->testlistFileName, s, m_pDlg->m_uiValTotal,
m_pDlg->m_uiValPassed, m_pDlg->m_uiValFailedGlobal,
m_pDlg->getSuccessRate(m_pDlg->m_uiValTotal, m_pDlg->m_uiValPassed),
m_pDlg->getFailureRate(m_pDlg->m_uiValTotal, m_pDlg->m_uiValFailedGlobal));
}
也许我理解这种方法是错误的,如果有人能够对此有所了解并帮助我实现这一点,那将非常感激!
问题: SetFilePointer始终等于INVALID_SET_FILE_POINTER。
更多信息:
m_pDlg->sumLog
这是我要写的文件的名称。在这个文件的末尾(可能大约1GB的数据),我试图开始插入这一行。 我已将其声明为
FILE* sumLog;
如果需要更多信息,我很乐意提供。
再次,非常感谢你!
答案 0 :(得分:0)
您是否在文件已有内容后询问如何在文件顶部写入新数据?
如果是这样,答案是尝试在任何地方插入数据,但文件末尾的效率非常低。基本上,您需要将插入点后的每个字节移动到文件中的较低位置。这涉及以非常复杂的方式读取和重写每个字节。
因此,最佳解决方案是将新内容写入新文件,然后在新内容之后将原始文件复制到新文件中。这样更有效,更容易实现。
答案 1 :(得分:0)
您不能简单地将此类可变长度数据插入已打开文件的开头。您需要采用不同的方法:
.csv
中跳过统计信息行,并将其移至备用文件中。.csv
文件作为输出首先打印标题和统计信息,然后打印用于计算统计信息的所有其他数据行