前提・実現したいこと
C言語を学習し始めたC言語初心者です。
C言語でファイル・ディレクトリの探索をしてその結果をCSV出力するプログラムを作成中です。
現状ディレクトリごとのファイル・サブディレクトリを取得して
ファイルならファイルサイズも一緒にCSV出力はできているのですが
1箇所サブディレクトリが2つあるところでインデントのつけ方を直したいのですが
どのように修正すればよいのか分からず悩んでいるので教えていただきたいです。
発生している問題・エラーメッセージ
現状
https://gyazo.com/5349177b78238625a22267c3ed684772
理想としては上記画像ファイルの『Sample4』とt『Sample5』が
1列ずつ左にセルを移動した形にしたいです。
理想(出力後セルを自分で移動させています)
https://gyazo.com/4a60c885568708a32ec5ceb8082168db
該当のソースコード
C
1#define _CRT_SECURE_NO_WARNINGS 2 3#include <Windows.h> 4#include <stdio.h> 5#include <locale.h> 6#include <stdlib.h> 7#include <io.h> 8 9void FileSearch(const wchar_t* dirpath); 10FILE* files; 11fpos_t size = 0; 12int c = 0,i = 0; 13 14int main(void) 15{ 16 // 表示する 17 FileSearch(L"探索したいディレクトリの場所"); 18 return 0; 19} 20 21 22// 引数として渡したディレクトリ以下のディレクトリとファイルを全て表示する 23void FileSearch(const wchar_t *dirpath) 24{ 25 HANDLE hFind; // ハンドル 26 WIN32_FIND_DATA win32fd; // ファイル情報 27 28 // ディレクトリにワイルドカードを追加(...\*となる) 29 wchar_t dirwildpath[1024]; // ファイル名も含んだパス 30 wcscpy(dirwildpath, dirpath); // ファイルパスをコピー 31 wcscat(dirwildpath, L"*"); // ワイルドカードを追加 32 33 // ハンドルを取得しファイル情報を保存する 34 hFind = FindFirstFile(dirwildpath, &win32fd); 35 36 // 何も見つからなかったとき 37 if (hFind == INVALID_HANDLE_VALUE) { 38 FindClose(hFind); 39 return; 40 } 41 42 while (FindNextFile(hFind, &win32fd)) 43 { 44 // カレントディレクトリと親ディレクトリのとき 45 if ((wcscmp(win32fd.cFileName, L".") == 0) 46 || (wcscmp(win32fd.cFileName, L"..") == 0) || (wcscmp(win32fd.cFileName, L"desktop.ini") == 0)) 47 { 48 // 何もしない 49 } 50 51 // ディレクトリのときの処理 52 else if (win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 53 { 54 files = fopen("output.csv", "a"); 55 for (i = 0; i < c; i++) 56 { 57 fprintf(files,","); 58 } 59 fprintf(files,"%ls\n",win32fd.cFileName); 60 c++; 61 fclose(files); 62 63 // 文字列バッファを更新 64 wchar_t dir_buf[1024]; 65 wcscpy(dir_buf, dirpath); // ディレクトリをコピーする 66 wcscat(dir_buf, win32fd.cFileName); 67 wcscat(dir_buf, L"\"); 68 69 // 再帰する 70 FileSearch(dir_buf); 71 } else 72 { // ファイルのとき 73 files = fopen("output.csv", "a"); 74 fseek(files, 0, SEEK_END); 75 fgetpos(files, &size); 76 for (i = 0; i < c; i++) 77 { 78 fprintf(files, ","); 79 } 80 fprintf(files, "%ls,%ld[byte]\n", win32fd.cFileName, size); 81 fclose(files); 82 } 83 } 84 85 FindClose(hFind); 86}
試したこと
FindNextFileで親ディレクトリに移動したらデクリメントを設けようと思ったのですが
条件文などが書けず断念しました。
補足情報(FW/ツールのバージョンなど)
Windows10・VisualStudio
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/22 02:04
2021/04/22 02:06