2016-08-20 13 views
1

私はディレクトリから日付ごとにすべてのファイル名の名前を表示したいと思います。私はすべての日付をソートしましたが、すべての名前を日付に関連付ける必要があります。それを行うための機能や方法はありますか?ディレクトリ内のファイル名のリストをCで日付順に出力するには?

#define BUFFERSIZE 100 

char SORTNAME() { 
    DIR *dir = opendir("."); 
    if (dir) { 
     char buffer[BUFFERSIZE]; 
     struct stat info; 
     struct dirent *s_dir; 
     int buf = BUFFERSIZE; 
     time_t *Time = malloc(sizeof(time_t) * buf); 
     int i = 0; 

     while ((s_dir = readdir(dir)) != NULL) { 
      if (s_dir->d_name[0] != '.') { 
       sprintf(buffer, "%s", s_dir->d_name); 
       stat(buffer, &info); 
       Time[i] = info.st_mtime; 
       i++; 
      } 
     } 

     int size = i; 
     int h, j, k, min; 
     time_t t; 

     for (j = 0; j < size - 1; j++) { 
      min = j; 
      for (k = j + 1; k < size; k++) { 
       if (Time[k] > Time[min]) { 
        min = k; 
       } 
      } 
      t = Time[min]; 
      Time[min] = Time[j]; 
      Time[j] = t; 
     } 
    } 
} 

これは少し基本的ですが動作します。

+2

あなたのデータに 'struct'を使い、' man qsort'を実行します。そして、あなたはまだ何かを "接続"していません。 –

+1

時間を配列に格納することは良い考えですが、そうです。ファイル名との接続が失われます。したがって、 'struct'を使うことを提案します。 ( 'unconnected') 'name'と' Time'配列にインデックスを含む3番目の配列が必要です。 '' struct''を使用してください。) – usr2564301

+0

これは奇妙な:あなたが表示するコードは、ファイル名-1の可能な限りの長さの日付を保存することができます。 – alk

答えて

1

次の手順を実行する必要があります。

  • は予想以上のファイルがある場合は、配列を再割り当て、ファイル名と構造体の配列で日付を格納します。ファイル名のコピーを割り当てていることを確認してください。
  • アレイをqsortと適切なソート機能で並べ替えます。さまざまな並べ替え機能を使用して、ファイルの時間、名前、拡張子でソートしてみてください。
  • 配列の順にエントリを出力します。ファイル時間を変換するにはstrftime()
+0

構造体に名前と日付を格納しようとします。私は配列の中にすべての日付を置くと、私はそれを(コードのように)並べ替えると、私は彼の名前ごとに各日付を呼び出しますか?それは動作するはずですか? – HugoB

+1

@HugoB:ファイル名のコピーを別の配列に追加し、この配列のエントリを 'Time'配列と入れ替えてプログラムを修正することができます。しかし、構造体の配列に対して 'qsort'を使う方が簡単で効率的です。 – chqrlie

+0

それは絶対に真です。プログラムに関する他の問題がある場合はここに書いてください – HugoB

関連する問題