最初に 今日はプログラマ向けの話題なので、一般の人にはツマラナイ記事かもしれません。
( しかも Windows での開発者向け。。 )
最近 VC2005( Platform SDK )をインストールし VC6.0 から移行していこうかなーと思い色々実験をしていたのですが、
なんとファイルを検索する API _findfirst で例外が起きてしまうのです。
僕はこの API 関数は自分ライブラリの一環の中で使用しているのですが、どうも特定ディレクトリを検索すると
落ちてしまう感じです。
自分のコーディングを疑ったり、そのフォルダのアクセス権限を疑ったり、気になることすべてを疑いましたが
2台のマシン上で同じ結果だったので、これは VC2005 と Windows2000/SP4 の問題な気がしてしょうがありません。
その証拠に
_findfirst系 部分を WinAPI のFindFirst() 系に変えたコードにすると
実行エラーにならないのです。
ちなみに WindowsXP 上ではこの問題は確認できませんでした。
3台のマシン環境( Windows2000 *2 WindowsXP )でVC2003 も含めて試してみたのですが、Windows2000上のみでの
発生確認をしております。
・正確に言うと、 _findnext() 関数で落ちており C:\Program Files フォルダ内の階層で検索する場合に限り
落ちてしまいます。
・落ちるディレクトリを丸ごとコピーし、別ドライブに持ってて検索した場合は落ちません。
・試した双方のマシンとも FAT32/NTFS と違うフォーマットでドライブを初期化してあります。
唯一共通するのは、Windows2000/SP4 と VC2005( PlatformSDK )という事実だけであります( ´д`)
まぁ FindFirst() 系を使えば良いという話でありますが、
Linux 用の Cライブラリ とかも趣味で書いてるので _findfirst を
使いたいのですよ!!(※1)
( ゜Д゜)モルァ!!
さてこの問題は(※2)、このブログの解決すべきテーマとして定期的に扱っていきます。
次回 エラーの詳細 と 発生した実行環境/ソース を例に謎を解いてみようと思います( ´д`)
※1
linux には findfirst() はありません。
純粋にライブラリで WinAPI を使いたくないというわがままです。
※2
似たような現象を体感したことがある人は、ぜひお知えてください。
0 コメント:
コメントを投稿