为什么没有向我的文件写入任何内容?
Why isn't anything being written to my file?
我正在用OpenCV制作一个程序,我想记录我正在跟踪的两个对象的X、Y坐标。我已经很好地检索了数据,并使用它在屏幕上显示坐标,但我一直在努力将其写入日志文件。
我有一个函数,我将所有相关数据传递给它,我确信我的程序正在访问该函数,因为文件正在创建中。
有人能告诉我为什么"test.txt"
是空的吗?提前谢谢。
这是我的代码:
void saveData(int leftX, int leftY, int rightX, int rightY, int distance){
logfile.open("test.txt");
//Timer
time_t start = time(0); //Set initial time point
//Counter
int counter = 0;
//String for coordinates
//String for coordinates
string coords = "Left X: " + intToString(leftX) + " LeftY: " + intToString(leftY) +
" Right X: " + intToString(rightX) + " Right Y: " + intToString(rightY) + " Distance between: " + intToString(distance) + "n";
//If 1 minute has passed
if (start - time(0) == 60){
//Write coordinates to log file
logfile << coords;
//Increment counter
counter++;
//After 30 mins of recording exit program
if (counter == 30){
//Close the log file
logfile.close();
//Exit with no errors
exit(0);
}
//Reset time to 0
start = time(0);
}
}
在C和C++中,在堆栈中创建的变量(也称为非指针变量)被限制在其范围内。我想您的函数将在外部循环中调用。循环将看不到计数器。一开始也是如此。
此外,您的代码中还有一些逻辑问题:
- 开始时间(0)==60将只测试一次。时间(0)将始终大于开始时间
- 计数器将仅递增到1(并且自开始时间(0)<0),因为它不在循环中,而只在if子句中
我可以根据我的意图,从你发布的代码中建议一个伪代码:
void saveData(data){
open file
setup start=time(0) and counter=0
format the output string
while(counter<=30){
if((int)(time(0)-start)%60==0){ //seconds_passed=60*N, N integer
write data
counter++
}
}
close the file
}
玩得开心
gf
编辑:如果您从外部无限循环调用此函数,则必须通过引用传递counter(因此从外部可以看到函数内部的增量)并作为参数开始。
首先,如果您在无限循环中调用此函数(正如您在注释中所说),也许您应该考虑不在每次调用时打开该文件。
其次,检查正好1分钟通过可能会失败,因为两次检查之间可能有超过1秒的通过时间。在这种情况下,您永远不会写入该文件。最好检查是否超过一分钟。
最后,你的实际问题(正如samgak所提到的)是
start - time(0)
将是负的,而你应该做
if (time(0) - start > 60)
编辑:我刚刚意识到你的代码有另一个问题:
//Timer
time_t start = time(0); //Set initial time point
// ...
//If 1 minute has passed
if (start - time(0) == 60){
您实际上是在检查这两行之间是否已经过了1分钟。假设这两行之间几乎没有发生什么,那么您就不太可能写入该文件。
还有
start = time(0)
最后没有效果。
相关文章:
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- Visual Studio 停止识别任何包含文件
- C++ 中是否有任何内置阶乘函数?
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 打开任何文本文件
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- 似乎没有任何读取文件的方法可以工作,所有方法都不返回任何东西-C++
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- 在未包含在任何其他文件中的文件中使用 extern 变量是否有任何可能的用途
- 是否可以在不使用任何头文件的情况下在C++中执行I/O操作
- 在 C++ 中将编辑过的内文件保存到输出文件时出现问题
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 尝试从 c 执行任何二进制文件
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- CMake表示,它已经编写了构建文件,但没有找到任何构建文件
- 在VC++2010中执行任何内置的ARRAY函数
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数