while(1) { static bool g_isSetGZM_File = TRUE; static FILE *tempfile; static LPTSTR sFileName; if(g_isSetGZM_File == TRUE) { SYSTEMTIME systime; GetSystemTime(&systime); wsprintf(sFileName, "D:\\CANPro\\GZSoluInfo_%u%02u%02u_%02u%02u.txt", systime.wYear, systime.wMonth, systime.wDay, systime.wHour+8, systime.wMinute); if(NULL != fopen_s(&tempfile, (const char *)sFileName, "w")) { //MessageBox(NULL,"Can not open GZMfile!","ERROR",MB_OK); return; } fprintf(tempfile, "%%Time\tState\tY1\tZ1\tX1\tY2\tZ2\tX2\r\n"); g_isSetGZM_File = FALSE; } else { if(NULL != fopen_s(&tempfile, (const char *)sFileName, "r+")) { //MessageBox(NULL,"Can not open GZMfile!","ERROR",MB_OK); return; } fprintf(tempfile, "%%Time\tState\tY1\tZ1\tX1\tY2\tZ2\tX2\r\n"); } fclose(tempfile); }
时间: 2023-07-07 12:40:30 浏览: 96
numpy_class.7z
这段代码的作用是在 D 盘根目录下生成一个以当前时间命名的文本文件,然后在文件中写入一行表头信息 "%%Time\tState\tY1\tZ1\tX1\tY2\tZ2\tX2\r\n"。之后,程序会不断地打开这个文件,写入一行表头信息,并关闭文件。这个过程会一直持续下去,因为 while(1) 表示这是一个死循环,程序会一直执行其中的代码。
不过这段代码也存在一些问题。首先,sFileName 指针没有初始化,需要分配内存来存储文件名。其次,每次循环都会先关闭文件,再重新打开,这样做效率比较低。正确的写法应该是先打开文件,然后进入循环,每次循环只需要写入一行即可。代码示例:
```cpp
static bool g_isSetGZM_File = true;
static FILE *tempfile = nullptr;
static LPTSTR sFileName = new TCHAR[MAX_PATH];
if (g_isSetGZM_File) {
SYSTEMTIME systime;
GetLocalTime(&systime);
_stprintf_s(sFileName, MAX_PATH, _T("D:\\CANPro\\GZSoluInfo_%04d%02d%02d_%02d%02d.txt"),
systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute);
if (fopen_s(&tempfile, sFileName, "w") != 0) {
MessageBox(NULL, _T("Can not open GZMfile!"), _T("ERROR"), MB_OK);
return;
}
fprintf(tempfile, "%%Time\tState\tY1\tZ1\tX1\tY2\tZ2\tX2\r\n");
g_isSetGZM_File = false;
}
fprintf(tempfile, "%%Time\tState\tY1\tZ1\tX1\tY2\tZ2\tX2\r\n");
```
注意,在这段代码中,我使用了 GetLocalTime 函数来获取本地时间,而不是 GetSystemTime。此外,我使用了 _stprintf_s 函数来格式化文件名,并且在代码结尾处只写入了一行表头信息,因为每次循环只需要写入一行即可。
阅读全文