開発環境 |
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