在进行点云预览的过程中会产生txt格式的临时文件,为避免累计过多临时文件,在每次开始预览时清空预览文件的缓存文件夹。方法:
//清空临时文件夹
void ClearTempFolder()
{
char *chDoc = ".";
char *strFileNameTemp = new char[100];
WIN32_FIND_DATA FileData;//WIN32_FIND_DATA数据结构对象
HANDLE hSearch;
BOOL bFinished = FALSE;
string strFullFolder = string("temp") + string("\\*.*");
hSearch = FindFirstFile(strFullFolder.c_str(), &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
{
cout << "No files found!" << endl;
return;
}
while (!bFinished)
{
if (FileData.cFileName[0] != chDoc[0])
{
//strFileNameTemp = FileData.cFileName;
strcpy(strFileNameTemp, FileData.cFileName);
string addr =string("temp")+ string("\\") + string(strFileNameTemp) ;
DeleteFile(addr.c_str());
}
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
bFinished = TRUE;
}
else
{
printf("Couldn't find next file.");
return;
}
}
}
FindClose(hSearch);
delete[]strFileNameTemp;
}
参考https://blog.csdn.net/ym_ms/article/details/6881932
考虑到由于事件触发顺序的原因,缓存文件夹和点云保存文件夹可能不位于同一位置,索性把缓存文件夹不和点云保存文件夹绑定,固定为运行程序的相对路径,这样清空缓存也会方便。
在开始预览之前的地方调用这个函数,同样在OnBnClickedCancel事件响应函数和OnDestroy()里都调用一下。
后续开发的几个方向:采样结束后自动开始缓存预览;预览点云密度随采样时长而改变,或许可以改变点的显示大小;预览点云用多线程方式写,防止程序卡死。