#include <stdio.h>
#include <windows.h>
#include <errno.h>

#define MAXPATH 256

void renameAndMove(char *pFileName, char *pszSrcDir, char *pszDestDir, char cPrefix, int iFileCount)
{
    char szMoveSrc[MAXPATH];		// ex) gazou\任意文字列.jpg
	char szMoveDest[MAXPATH];		// ex) gazou2\A-0001.jpg

	sprintf(szMoveSrc, "%s\\%c\\%s", pszSrcDir, cPrefix, pFileName);
	sprintf(szMoveDest, "%s\\%c-%04d.jpg", pszDestDir, cPrefix, iFileCount);

	// MoveFileは移動先が存在すると失敗するため先に移動先を削除しておく
	DeleteFile(szMoveDest);

	if(0 == MoveFile(szMoveSrc, szMoveDest)){
		printf("*書類移動失敗 [%s] <- [%s]\n", szMoveDest, szMoveSrc);
	}else{
		printf("書類移動成功 [%s] <- [%s]\n", szMoveDest, szMoveSrc);
	}
}

int main()
{
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind;
	int iTargetDirCount;
	int iTargetFileCount;
	char *pszSrcDir = "gazou";
	char *pszDestDir = "gazou2";
	char *pszPrefixChars = "ABCDEF";
	char szFindTarget[MAXPATH];		// ex) gazou\A\*.jpg

	// MoveFileは移動先フォルダが存在しないと失敗するため先に移動先フォルダを作成しておく
	CreateDirectory(pszDestDir, NULL);

	for(iTargetDirCount = 0; iTargetDirCount < strlen(pszPrefixChars); iTargetDirCount++){
		iTargetFileCount = 0;

		// A～Fまでのフォルダ内検索文字列を作成。対象はjpgファイルのみ。
		sprintf(szFindTarget, "%s\\%c\\*.jpg", pszSrcDir, pszPrefixChars[iTargetDirCount]);

		// 最初のファイルを取得
		hFind = FindFirstFile(szFindTarget, &FindFileData);
		if (hFind == INVALID_HANDLE_VALUE) {
			printf ("書類識別子取得失敗。失敗番号：%d。取得対象：%s\n", GetLastError(), szFindTarget);
		} else {
			printf ("書類識別子取得成功。取得対象：%s\n", szFindTarget);
			renameAndMove(FindFileData.cFileName, pszSrcDir, pszDestDir, pszPrefixChars[iTargetDirCount], ++iTargetFileCount);

			// 2個目以降のファイルを取得するループ
			while(FindNextFile(hFind, &FindFileData) != 0){
				renameAndMove(FindFileData.cFileName, pszSrcDir, pszDestDir, pszPrefixChars[iTargetDirCount], ++iTargetFileCount);
			}

			if(FindClose(hFind) == 0){
				printf("書類識別子閉鎖失敗\n");
			}else{
				printf("書類識別子閉鎖成功\n");
			}
		}
		printf("\n");
	}
	return 0;
}
