C++ 如何使用SetFilePointer重定向到.csv文件的顶部
基本上,我正在为一系列要运行的测试创建一个错误日志,记录失败和成功。错误日志是一个.csv文件。基本上,程序采用了一个测试列表,例如,它们被命名为#testlist.txt。每个#testlist.txt中都包含一系列测试 比如说, #testlist.txt包含: Test1.txt Test2.txt Test3.txt 在Test1.txt中,有3个子测试。这些子测验可能失败或成功;因此,成功率和失败率。因此,此错误日志报告的是每个测试的统计信息,以及使用#testlist的所有测试的全局成功率和失败率 我的任务是将#testlist的统计数据放在列表的顶部而不是底部问题是:我不知道如何在打印完所有单个测试统计数据后重定向到文件顶部,以便将全局统计数据打印到.csv文件中C++ 如何使用SetFilePointer重定向到.csv文件的顶部,c++,csv,C++,Csv,基本上,我正在为一系列要运行的测试创建一个错误日志,记录失败和成功。错误日志是一个.csv文件。基本上,程序采用了一个测试列表,例如,它们被命名为#testlist.txt。每个#testlist.txt中都包含一系列测试 比如说, #testlist.txt包含: Test1.txt Test2.txt Test3.txt 在Test1.txt中,有3个子测试。这些子测验可能失败或成功;因此,成功率和失败率。因此,此错误日志报告的是每个测试的统计信息,以及使用#testlist的所有测试的全局
我在Visual Basic 2008中使用C++。任何建议都会非常有用!非常感谢你
更新: 因此,这似乎是一个愚蠢的问题,但我去MSDN查找SetFilePointer,这是我的同事建议我尝试的,但对于为什么它在我的代码中不起作用,这是没有意义的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始终等于无效的\u SET\u FILE\u指针
更多信息:
m_pDlg->sumLog
这是我要写入的文件的名称。在这个文件的末尾(可能是1GB左右的数据),我试图开始插入这一行。
我已经宣布它是
FILE* sumLog;
如果需要更多信息,我很乐意提供
再次感谢你 您是否在询问如何在文件已包含内容后在文件顶部写入新数据 如果是这样的话,答案是尝试在文件末尾以外的任何位置插入数据效率极低。基本上,您需要将插入点之后的每个字节移到文件中较低的位置。这涉及到以非常复杂的方式读取和重写每个字节
因此,最好的解决方案是将新内容写入新文件,然后在新内容之后将原始文件复制到新文件。这更高效,更容易实现。您不能简单地将这种可变长度的数据插入已打开文件的开头。您需要一种不同的方法:
.csv
中读取数据时跳过了统计数据行,并将其移动到备份文件中.csv
文件,首先打印标题和统计信息,然后打印用于计算统计信息的所有其他数据行Visual Basic 2008中的C++?这意味着什么?将输出吐入错误日志和统计数据,并最终合并这些文件。这是某种精灵@Jonathanwood请查阅以下内容:
revind()
,ostream::seekp
,ostream::tellp
@ThomasMatthews:Hi Thomas!谢谢你的建议!我尝试了所有这些功能,出于某种原因,它只会在完成所有操作后打印。我试着倒带(m_pDlg->sumLog),它在最后打印下一个东西。然后,fseek(m_pDlg->sumLog,0,SEEK_SET)仍然有相同的效果。这是一个很好的建议!非常感谢。但是,我想知道如果我在文件顶部留下一个空间让它被覆盖,会发生什么?是的,这种方法会奏效。只是A)你需要确保你留下足够的空间,B)要做到这一点,你可能会有太多的空间,以至于你的数据中有一堆空间。