[前の記事]« ファイル群のバラバラの名前の中から特定の一文字を削除したい
[次の記事][NT系]BU(BATUTY)が使えません »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DIR…ディレクトリ(フォルダー)/ファイルの一覧」索引へ

自作ソフト内からのdirコマンド実行でファイルリストが更新されない

225.
自作ソフトでdirコマンドでファイルリストが更新されない。
2005年01月25日(火) 17時25分
RiC
●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のバージョン↓

(以下ご自由に質問文をお書きください)
230.
Re:自作ソフトでdirコマンドでファイルリストが更新されない。
2005年01月26日(水) 18時02分
otn
>●DOS/Windowsのバージョン↓
>MS-DOS Ver 6.2

>2)キャッシュ(?)をクリアする方法はあるんでしょうか?

効くかどうか分かりませんが、ディスクリセットのシステムコールでどうでしょうか?
AX=0DHで、INT21
BC++でどう書けば良いかは知りません。
241.
Re2:自作ソフトでdirコマンドでファイルリストが更新されない。
2005年01月28日(金) 09時52分
RiC
>効くかどうか分かりませんが、ディスクリセットのシステムコールでどうでしょうか?
>AX=0DHで、INT21
>BC++でどう書けば良いかは知りません。

レスありがとうございます。

struct REGS regs;
int result;

regs.h.ah = 0x0d;
intdos(®s,®s);
if(regs.x.cflag != 0)
printf("rst result(error) : %04X\n[%04X]",regs.x.cflag,_doserrno);

で実行しましたが、結果同じでした。
_disk_bios関数なども試してみましたが、結果は全て同じで、
fopenではなく、直接セクタリードを行うことを、試してみたいと思います。
 
 


カテゴリー「DIR…ディレクトリ(フォルダー)/ファイルの一覧」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年01月25日 12:13に投稿されたエントリーのページです。

ひとつ前の投稿は「ファイル群のバラバラの名前の中から特定の一文字を削除したい」です。

次の投稿は「[NT系]BU(BATUTY)が使えません」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート