|
|
●DOS/Windowsのバージョン↓ MS-DOS Ver 6.2 現在DOS上で、CD-ROMからフラッシュディスクへのイメージコピーを行うソフト作成中ですが、 困った部分が出てきてますので、知恵をお持ちの方がいれば助けて下さい。 2枚のCDが有り、このCDにはそれぞれファイルが一つ別名で 入ってるとします。 DOS上で、1枚目のCDをドライブに挿入し、 dirコマンドでリストを出力すると当然、 1枚目のCDに入ってるファイルリストが表示されます。 このまま、CDを取り出し、2枚目のCDを入れて、 dirコマンドを実行すると、これも当然2枚目のファイルリストが表示されます。何ら問題ありません。 しかし、自作ソフト(BC++3.1)で、上記動作を、 system関数を使い、2枚目のCDでdirコマンドを 発行したところ、1枚目のCDのファイルリストが表示されるのです。 おそらく、キャッシュか何かに、ファイル情報が残っているため だと思うのですが、 1)system関数を使用するのと、DOS上でコマンド入力を行うのでは、 何か動作が違うのでしょうか? 2)キャッシュ(?)をクリアする方法はあるんでしょうか? 以下が検証に使用しているのと同等のソースです。 1回目のループまでに1枚目のCDを挿入しておき、 2回目のループまわるときに、2枚目のCDに入れ替えました。 ここで、fopenを何度実行してもNULLになるので、 おかしいな?とおもい、dirで確認してみたということです。 尚、CDドライブは、SCSI接続です。 ------- system("dir e:"); //1枚目であることの確認 for ( ;; ) //ファイルオープンできるまでループ。 { if (( fp = fopen("b.txt", "rb" )) == NULL ) //2枚目のCDに入ってるファイル。 { drive_open( 0, 2, 2 ); //CDドライブをオープンする。 system("pause"); do{ //CDドライブの準備が出来るまで待つループ delay(1000); if(cnt++ >= 60) //1分でタイムアウト { printf( "CD-ROM ドライブの準備が出来ていません。\n"); return ( -1); } }while(TestUnitReady(0,s_id) < 0); cnt = 0; system( "dir e:" ); //何度実行しても1枚目のリストが表示される。 }else{ break; //ここにはこない;; } } 以上、よろしくお願い致します。●DOS/Windowsのバージョン↓ (以下ご自由に質問文をお書きください) |
|
|
|
|