프로그래밍/윈도우 프로그래밍

[윈도우] FindFirstFileA를 사용한 MBCS 문자열 탐지

jinkwon.kim 2017. 2. 2. 00:54
728x90
반응형

FindFirstFileA를 사용한 MBCS 문자열 탐지

표준 C프로그래밍과 Window 프로그래밍을 섞어서 사용할때 발생하는 디렉토링 리스팅 해결 방법

FindFirstFileA 를 사용하면 char형 배열로 찾아쓸수 있다. FindFirstFileW 또는 FindFirstFile 를 사용시 Unicode로 되기때문에 사용할수 없다.

 

int Check_File_Name(const char *sDir)
{
	WIN32_FIND_DATA fdFile;
	HANDLE hFind = NULL;
	char sPath[2048];
	char fine_name[2048];

	//Specify a file mask. *.* = We want everything!
	memset(sPath, '\0', sizeof(sPath));
	strncpy(sPath, "D:\\VM\\*.*", strlen("D:\\VM\\*.*"));

	if ((hFind = FindFirstFileA(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
	{
		printf("Path not found: [%s]\n", sPath);
		return RET_FAIL;
	}

	do
	{
		//Find first file will always return "."
		//    and ".." as the first two directories.
		if (strcmp(fdFile.cFileName, ".") != 0
			&& strcmp(fdFile.cFileName, "..") != 0)
		{
			//Is the entity a File or Folder?
			if (fdFile.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
			{
				printf("Directory: %s\n", sPath);
				continue;
			}
			else{
				wprintf(L"File: %s \n", fdFile.cFileName);
				int len = WideCharToMultiByte(CP_ACP, 0, fdFile.cFileName, -1, NULL, 0, NULL, NULL);
				WideCharToMultiByte(CP_ACP, 0, fdFile.cFileName, -1, fine_name, len, NULL, NULL);
				fprintf(stderr, "File: %s \n", fine_name);
				break;
			}
		}
	} while (FindNextFile(hFind, &fdFile)); //Find the next file.

	FindClose(hFind); //Always, Always, clean things up!

	return RET_OK;
}
728x90
반응형