開発環境 Visual C++ 2015
実行環境 Windows 10 Home 64bit
プロジェクトの種類 Win32 Console Application
プロジェクト名 dircsv
追加のオプション Empty project

dircsv.cpp
#include <fcntl.h>	// _O_WTEXT
#include <io.h>		// _setmode
#include <stdio.h>	// _fileno
#include <stdlib.h>
#include <wchar.h>
 
int files(const wchar_t *dir);
 
int wmain()
{
	_setmode(_fileno(stdout), _O_WTEXT);
	_setmode(_fileno(stderr), _O_WTEXT);
 
	wchar_t dir[_MAX_PATH];
	_wgetcwd(dir, _countof(dir));
	size_t len = wcslen(dir);
	if (0 < len && dir[len - 1] != L'\\') {
		wcscat_s(dir, L"\\");
	}
 
//	wprintf(L"dir,name,size,create,write\n");
 
	files(dir);
 
	return 0;
}
 
int files(const wchar_t *dir)
{
	wchar_t path[_MAX_PATH];
	if (swprintf_s(path, L"%s*.*", dir) < 0) {
		fwprintf(stderr, L"error: パスが長過ぎます。[%s]\n", dir);
		return -1;
	}
 
	struct _wfinddata_t fi;	// fileinfo
	intptr_t handle = _wfindfirst(path, &fi);
	do {
		if (wcschr(fi.name, L',')) {
			fwprintf(stderr, L"error: カンマがあります。[%s]\n", fi.name);
		}
		if (fi.attrib & _A_SUBDIR) {
			if (!wcscmp(fi.name, L".") || !wcscmp(fi.name, L"..")) {
				continue;
			}
			if (swprintf_s(path, L"%s%s\\", dir, fi.name) < 0) {
				fwprintf(stderr, L"error: パスが長過ぎます。[%s][%s]\n", dir, fi.name);
				continue;
			}
			files(path);
		}
		else {
			wprintf(L"%s,%s,%u,%llu,%llu\n",
				dir,		// ディレクトリ
				fi.name,	// 名前
				fi.size,	// サイズ
				fi.time_create,	// 作成日時
				fi.time_write);	// 更新日時
		}
	} while (_wfindnext(handle, &fi) == 0);
	_findclose(handle);
	return 0;
}
 
最終更新:2016年11月15日 10:39