vs2017 c/c++ 遍历文件夹里的图片

因为使用 _finddata_t 需要添加的头文件是 #include  

//图片文件夹路径
char* pPicFolderPath = argv[2]; //我是写成了命令行参数,你可换成自己的路径,比如:"D\\Pic"

//从图片文件夹中遍历图片
struct _finddata_t m_fileInfo;
long long hFile = 0;
char pSearchPath[256];
memset(pSearchPath, 0, 256);
sprintf_s(pSearchPath, 256, "%s\\*.*", pPicFolderPath);

hFile = _findfirst(pSearchPath, &m_fileInfo);
if (0 >= hFile)
{
	printf("请检查图片路径...\n");

	assert(0 < hFile); //assert(0 < hFile) 中括号里为 false,则终止程序
}

do
{
	char pExtName[256];

	memset(pExtName, 0, 256);

	memcpy(pExtName, m_fileInfo.name + strlen(m_fileInfo.name) - 3, 3);

	if (!(m_fileInfo.attrib & _A_SUBDIR) &&
		(0 == strcmp("png", pExtName) || 0 == strcmp("PNG", pExtName) ||
		 0 == strcmp("bmp", pExtName) || 0 == strcmp("BMP", pExtName) ||
		 0 == strcmp("jpg", pExtName) || 0 == strcmp("JPG", pExtName) ||
		 0 == strcmp("jpeg", pExtName) || 0 == strcmp("JPEG", pExtName))
		)
	{
		char pImgPath[256];

		memset(pImgPath, 0, 256);

		sprintf_s(pImgPath, 256, "%s\\%s", pPicFolderPath, m_fileInfo.name); // pImgPath 为图片的完整路径

		//对图片操作
				
	}


} while (_findnext(hFile, &m_fileInfo) == 0); 

hFile 须为 long long 类型,因为 _findnext 函数的第一个参数类型是 intptr_t

在写这段代码的过程中,我犯了很让自己困惑的错误,我的错误过程:

我原先在 win10 vs2010 中写过类似的代码,定义 long hFile = 0,运行一直都没有问题,但在 vs2017 中运行就是错误的,在 _findnext 处报异常,我花了大量的时间查看路径和对比代码,发现并没有问题,一直苦思直到心态快爆炸了,于是打开 google 查了一下,找到了问题的原因,如上一段所说

总结:

定位错误原因不清晰,过于相信自己的判断,导致了浪费了大量的时间去查错,正确的步骤是首先应该认真定位错误原因,而不是反复无意义的修改 + debug,debug 到具体错误位置,异常原因在 google 查询

你可能感兴趣的:(Opencv)