答えてねっとは、
マイクロソフトが運営する
パソコンに関する
Q&Aサイトです。

質問

プログラムからファイルオープンエラー

製品名:OS製品/Windows XP/サービスパック 2

現象:おかしい/エラーが出る

懸賞ポイントが設定されています。 100

C言語で開発していますが、サイズの小さいファイルを多数出力すると、『イベントID:51』のディスクアクセスエラーが発生し、以後OSが不安定な状態となり再起動せざるを得ない状態となります。

テスト的に以下のような簡単なプログラムで試しても再現します。
※正確には、再現するマシンと再現しないマシンがあります。

  ・あるフォルダ(C:\tmpなど)の下にフォルダを2000個、
   さらにそのフォルダの下に1000個ずつの0バイトファイルを作成。
  ・ファイルは、fopenとfcloseで作成し、何も書き込まない。(つまり0バイトのファイルを作成)
  ※1プロセス、複数プロセス、複数スレッドで処理しても結果は同じ。

<環境>
 機種: DELL DIMENTION 9100 など
 OS: Windows XP SP2
 MEM: 2GB
 HDD: 300GB

回答1 (この回答は質問に対する回答です)

  • 投稿ID:A2007370213
  • 投稿日時:2007/12/05 17:04

可能性としてNortonなどのAuto-Protectなどが有効になっていてアクセスがおいつかないとか?

  •  

回答2 (この回答は質問に対する回答です)

  • 投稿ID:A2007370219
  • 投稿日時:2007/12/05 17:07

フォルダ数には400個という制限があります。
下記回避策で数を増やす必要がありますね。
http://support.microsoft.com/kb/813711/ja

  •  

回答3 (この回答は回答2に対する回答です)

  • 投稿ID:A2007370224
  • 投稿日時:2007/12/05 17:10

追記:
SP2で修正済みとありますが、掲題の「フォルダの表示設定やカスタム設定が失われる、または設定が正しくない」
が修正済みという事と思われます。

  •  

回答4 (この回答は回答2に対する回答です)

  • 投稿ID:A2007370227
  • 投稿日時:2007/12/05 17:12

> フォルダ数には400個という制限があります。
> 下記回避策で数を増やす必要がありますね。
http://support.microsoft.com/kb/813711/ja

それは、レジストリに保存される
> 各フォルダの表示設定やカスタム設定
のデフォルトの個数であって、フォルダの中に作成できるフォルダ数の上限では
ない。

質問者の質問の趣旨、そしてMSKBの中身をちゃんと理解してから回答しなさいな。

  •  

回答5 (この回答は回答4に対する回答です)

  • 投稿ID:A2007370284
  • 投稿日時:2007/12/05 18:03

4/のお偉いさん
実験・実証されたのですか?
偉そうにいつもおっしゃるが回答できないのならむやみな書込みは止めてほしい。

  •  

回答8 (この回答は回答5に対する回答です)

  • 投稿ID:A2007370330
  • 投稿日時:2007/12/05 18:47

> 実験・実証されたのですか?
ファイルの*作成*に失敗することと、フォルダの*表示*設定の個数の上限は
論理的につながりません。それがつながるというのを論理的に説明できるという
のなら、貴殿が責任を持って行ってください。

さらに、件のMSKBでは
> このデータはフォルダ全体で 400 個 (ローカル フォルダ 200 個、ネットワーク フォルダ 200 個) に制限されています。
とあり、ある特定のフォルダの中に多数のフォルダを作成していることとは
関係ないと思われます。

  •  

回答11 (この回答は回答5に対する回答です)

  • 投稿ID:A2007370400
  • 投稿日時:2007/12/05 20:33

/5
>実験・実証
してみました。
2〜3分ほどかかりますが、一つのフォルダの中にフォルダを作り、それをコピーすることを繰り返してみました。
400超えても何の変化もありません。
その後、1分ほどかけて同じコトを繰り返すと、「一つのフォルダに2000個のフォルダ」という状態以上のものを作成する事ができます。この上位のフォルダをコピーする事で質問文と同じかそれ以上の状態を作る事ができます。

>偉そうにいつもおっしゃるが回答できないのならむやみな書込みは止めてほしい。
同じコトを思いました。対象は全く違いますが。たかだか5分で検証できるのに。

  •  

回答10 (この回答は回答2に対する回答です)

  • 投稿ID:A2007370354
  • 投稿日時:2007/12/05 19:26

>フォルダ数には400個という制限があります。

試すまでもなく、本質問とは意味が全然違います。
さらに、試しましたが当然2000個のフォルダ作成は余裕で可能です。

  •  

回答6 (この回答は質問に対する回答です)

  • 投稿ID:A2007370313
  • 投稿日時:2007/12/05 18:30

ファイル作成時のファイル名・フォルダ名を生成するときにどのような規則になって
いるんでしょうかね?
ロングファイル名から8.3形式を生成するときにファイル名で何らかの衝突が発生
しているという可能性があるような気が少しします。

# FAT32ボリュームでは1フォルダにはファイル・フォルダを作成することができる
# 最大数が32,766(=2^31-2)個になっていますが、ロングファイル名を使うと、
# 8.3形式のショートファイル名生成時に衝突が発生して、早い段階でファイルが
# 作成できないということがあります。
# これは実験したことがありますので。

  •  

回答7 (この回答は回答6に対する回答です)

  • 投稿ID:A2007370319
  • 投稿日時:2007/12/05 18:33

あ、記憶間違いがあった。
FAT32の1フォルダ内のファイルの最大数は65,534(=2^16-2)個だったわ。
# 32766の右辺の式も間違っているし...
[W98:FAT16、FAT32 でディレクトリ内に作成できる最大ファイル数]
http://support.microsoft.com/kb/436213/ja

  •  

回答9 (この回答は質問に対する回答です)

  • 投稿ID:A2007370334
  • 投稿日時:2007/12/05 18:53

イベントログで確認されているようですが、
データのダンプ部からあるていど原因が絞り込めるようです。>イベント:51
http://support.microsoft.com/kb/244780/ja

fopen/fcloseではなくて、CreateFile使うとどうなんでしょね?
※自分ではちょっと試したくないので勘弁。

  •  

昨日の利用状況


総投稿数 898 件

回答総数 717 件

登録者数 67 人

利用登録ユーザ 2012 人

ゲスト 24453 人

ページビュー 128752

登録済みFAQ 20 件

景品応募サイト

Windows ヘルプと使い方

Microsoft Users

クロスプラットフォーム WEB ブラウザプラグイン:Silverlight