トップページ > 記事閲覧
フォルダの中身をリストアップする方法について
名前:へけぽん 日時: 2021/12/19 22:29

ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4552 このスレッドを参考に以下の関数を作ってみました mojis ファイルズ;// mojis は自作の文字列クラス、複数の文字列を扱う int リストアップ(){ FILEINFO FileInfo ; DWORD_PTR FindHandle ; int 総数 = 0; // 検索開始、最初のファイルの情報を取得 FindHandle = FileRead_findFirst( "DATA\\*", &FileInfo ) ; // ファイルが見つかった場合のみ分岐の中を実行 if( FindHandle != ( DWORD_PTR )-1 ) { do { // 見つかったファイル名をコピー ファイルズ[総数] = FileInfo.Name ; 総数++; ファイルズ.+( 1 );//文字列の枠数を増やす // 次のファイルを検索、無かったらループを抜ける }while( FileRead_findNext( FindHandle, &FileInfo ) >= 0 ) ; } // 検索ハンドルの後始末 FileRead_findClose( FindHandle ) ; return 総数; } 自作の文字列クラスに順にファイルの名前を格納し DATAフォルダの中にあるファイルとフォルダの総数を返す処理です 試してみたらなぜかファイル、フォルダの数が実際よりも2多くカウントされ mojis[0]とmojis[1]に"・"と"・・"という謎のフォルダ名が入っています DirFlagを調べたところこの二つにはTRUEが入っていてフォルダ扱いのようでした FindHandle = FileRead_findFirst( "DATA\\画像\\*", &FileInfo ) ;のように サブフォルダで試してみても最初の2つが"・"と"・・"でした ファイルズ[2]以降はちゃんとした文字列が入っていますし、 返却される戻り値(int 総数)がどのフォルダで試しても実際より2大きい値で返ってきますので 自作文字列クラスの問題ではないと思います 原因が自分ではわからず質問させていただきました
メンテ

Page: 1 |

Re: フォルダの中身をリストアップする方法について ( No.1 )
名前:kokosan60 日時:2021/12/20 08:56

こちらはWindowsの仕様のようです。 コマンドdirを実行すると必ず最初に.と..が表示されます。 C:\Users\Administrator\Music>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は xxxx-xxxx です C:\Users\Administrator\Music のディレクトリ 2021/12/20 08:53 <DIR> . 2021/12/03 13:32 <DIR> .. 2021/12/20 08:53 <DIR> aaa 0 個のファイル 0 バイト 3 個のディレクトリ x バイトの空き領域 cdコマンドで実行してみると、 cd .  …現在のディレクトリ cd .. …一つ上のディレクトリ となっていますので、 それを表すものかと。
メンテ
Re: フォルダの中身をリストアップする方法について ( No.2 )
名前:へけぽん(解決) 日時:2021/12/20 13:04

仕様だったのですね kokosan60さん、回答ありがとうございました ” .. ”について気を付けるべき点も、詳しく解説されているスレッドを見つけることも出来ました ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4858
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存