最大ファイル数のトラップ…
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」には、連番が入ります。)
確かにファイル名の長さによって作成できるファイル数が
制限されているのを確認できた…。
ああ~プログラムを修正せねば…。
今日の一言
沢山ファイルが要る時は、ファイル名にも気をつけよう…。
| 固定リンク
コメント