« MicMacアルビニア・ティリア交流会 | トップページ | 意外な伏兵 »

2007年1月17日 (水)

最大ファイル数のトラップ…

2万ファイルを書き込んだ所で
>ディスクに十分な空き領域がありません。
とエラーを告げられた…。
ディスクの空き容量は、十数GB空いているのにおかしい。
確かファイル数は、最大65536個
作れるはずじゃあ無かったっけ?

とググってみる。

W98:FAT16、FAT32 でディレクトリ内に作成できる最大ファイル数

ざっと見ると65534個のファイルが作成可能に読める…。

でも注意書きに…
>長いファイル形式は、13 文字ごとに
>ディレクトリ エントリを 1 つ使用します。

とある。

これに引っかかっているのか?
と言う訳で早速検証してみた…。


#include<stdio.h>
#include<stdlib.h>
#include<direct.h>
#include<windows.h>
#define MAX_FILE (65534+1)
void check(char*format){
    char name[256];
    int i,j;
    FILE*file;

    for(i=j=0;i<MAX_FILE;i++){
        if(i==j){
            printf("%5d / %5d\n",i,MAX_FILE);
            j+=500;
        }
        sprintf(name,format,i);
        if((file=fopen(name,"w"))==NULL)
            break;
        fclose(file);
    }
}
void main(void){
    _mkdir("sample1");
    _mkdir("sample2");
    _mkdir("sample3");
    check("sample1\\123%05d.dat");
    check("sample2\\12345678%05d");
    check("sample3\\123456786012345678901%05d");
}

実行すると数十分程かかる…。
ので放っといて夕食食って風呂も浴びると
終わっているかもしれない。

で、結果は、以下の通り。
--------12345678901234567890123456
sample1\123xxxxx.dat              :65534 file
sample2\12345678xxxxx             :32767 file(=65534/2)
sample3\123456786012345678901xxxxx:21844 file(=65534/3)
(※「xxxxx」には、連番が入ります。)

確かにファイル名の長さによって作成できるファイル数が
制限されているのを確認できた…。

ああ~プログラムを修正せねば…。

今日の一言
沢山ファイルが要る時は、ファイル名にも気をつけよう…。

|

« MicMacアルビニア・ティリア交流会 | トップページ | 意外な伏兵 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 最大ファイル数のトラップ…:

« MicMacアルビニア・ティリア交流会 | トップページ | 意外な伏兵 »