フォルダ名とファイル名表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dirent.hを使った男

フォルダ名とファイル名表示

#1

投稿記事 by dirent.hを使った男 » 7年前

ファルダとサブファルダの、ファイル名とフォルダ名を表示したいです。
お返事お願いします。

コード:

void printdir(char *dir,int loop)
{   DIR *dp;
    struct dirent *entry;
    struct stat statbuf;
    
    int num2=0;
    int count=0;
    char *dir2;
     dir2=dir;
  //中略
    if((dp=opendir(dir2))==(DIR*)NULL){
         fprintf(stderr,"bre cannot open directory:%s\n",dir2);
         closedir(dp);
         return;  
                               }
  
                while(num<loop&&(entry=readdir(dp))!=NULL){              
                     printf("%p\t%s\t%p\n",dir2,dir2,dp);
                     stat(entry->d_name,&statbuf);
                     if(S_ISDIR(statbuf.st_mode)){
                         printf("!%p%10s\n", entry->d_name,entry->d_name);

        //中略
       printf("before%10s\\1 %p\\%5d\n",entry->d_name,entry,count);                                            
                       printdir(entry->d_name,loop);
                                              }else{
                          printf("%10s\\\\\n",entry->d_name);               
                                                    }
                            printf("under%10s%5d%5d\n",entry->d_name,num,loop);
                                                           }
                  fprintf(stderr,"cannot open directory:%p%10s%4d%4dNULL:%10s\n",dp,entry-   >d_name,num,loop,dir2);
                  chdir("..");
                  closedir(dp);
                  return;
      //中略
}
if((dp=opendir(dir2))==(DIR*)NULL)は、指定フォルダ内のdirromを、実行するたびにフォルダと判定したり、ファイルと判定したりします。フォルダ判定にしたいです。
opendirの判定をフォルダとファイルを区別したいです。

Windows XP
Borland C++

二年間1ヶ月C言語を使いました。
#include<stdio.h>
#include<dirent.h>
#include<string.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<time.h>
を使っています。
お返事お願いします。

オカピーα
記事: 120
登録日時: 8年前

Re: フォルダ名とファイル名表示

#2

投稿記事 by オカピーα » 7年前

このサイトが役に立つと思われます。
http://www.geocities.jp/ky_webid/win32c/054.html
Win32API(C言語)編 第54章 ファイルを列挙する

また、ファイルかフォルダかの区別は
PathFindExtension関数を使うといいのかな、と思います。
http://nienie.com/~masapico/api_PathFindExtension.html
C,C++,C#,これらを極めることを「3C政策」と言う

dirent.hを使った男

Re: フォルダ名とファイル名表示

#3

投稿記事 by dirent.hを使った男 » 7年前

オカピーaさん お返事ありがとうございました。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: フォルダ名とファイル名表示

#4

投稿記事 by YuO » 7年前

ディレクトリではなくフォルダなんですよね……。

SHGetDsektopFolder 等の API を起点として,IShellFolderIEnumIDList とお友達になりつつ,列挙していって,という感じでしょうか……。
# COM なのと ITEMIDLIST が非常に面倒くさい……。


ちなみに,ディレクトリとファイルの区別は, あたりでしょうか。
最初の方法は FindFirstFile API 等で得られる情報なので失敗は気にしなくて良く,
2番目の方法は INVALID_FILE_ATTRIBUTES ならばアクセス失敗なので「情報が得られない」ということになります。
最後の方法は直感的ですが,「ファイルもディレクトリも存在しない」等の場合のアクセス失敗という情報すら得られない,という難点があります。
# そもそも,なんで Windows なのに opendir とかでやろうとしているの,という疑問点があったりしますが。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: フォルダ名とファイル名表示

#5

投稿記事 by softya(ソフト屋) » 7年前

># そもそも,なんで Windows なのに opendir とかでやろうとしているの,という疑問点があったりしますが。

私も詳しくないですがBCCに#include<dirent.h>のライブラリがありopendirが使えるようです。BCC使いではないので詳細は良く分かりません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る