ページ 11

ファイルサイズ0のファイルが削除できない

Posted: 2010年5月20日(木) 08:20
by dic
タイトルの通りファイルサイズがゼロのファイルを
remove( "hoge.txt" );
と削除しようとしましたが、削除できませんでした
また
DeleteFile( "hoge.txt" );
としても削除できませんでした

ソースとしては下のとおりとなってます
ファイルサイズが15kくらいあるのは削除できるのですが
ファイルサイズがゼロのファイルだけが残ってしまう現象が起きてます

どうやったらファイルサイズゼロのファイルが削除できるのでしょうか?

開発環境:Windows2000 VC++6
確認動作OS:Windows2000,XP
int    i;
    char    file[1024];
    for( i=1; i<=g_iEnd; i++ )
    {
        memset( file, 0, sizeof(file) );
        sprintf( file, "%d.txt", i );
        DeleteFile( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_jis.txt", i );
        DeleteFile( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_list.txt", i );
        DeleteFile( file );
    }

Re:ファイルサイズ0のファイルが削除できない

Posted: 2010年5月20日(木) 08:58
by たいちう
VC7.1, Windows XPで試しましたが、remove, DeleteFileともに削除できました。

・sprintfの使い方に勘違いなどはないですか?
→ ファイル名を直接ソースコードに書いても削除できない?
・ファイルをエディタやプログラムの別の部分で開いている?
・VC6のバグ?
→ ちょっと考えにくい。VCのサービスパックは何を当てていますか?
・プログラムでそのファイルに何か書き込みをしてからなら削除できる?

Re:ファイルサイズ0のファイルが削除できない

Posted: 2010年5月20日(木) 09:04
by ookami
手元に VC++6 が無いので確認できていないのですが、
(VC++2005Expressでは問題なく削除できることを確認しました)
別プロセスが握っている可能性はありませんか?エクスプローラ上で削除することはできるのでしょうか。

Re:ファイルサイズ0のファイルが削除できない

Posted: 2010年5月20日(木) 09:17
by dic
サービスパックはなにも当てていない状態ですので
サービスパックをあてようと思います

エクスプローラー上では削除できます

また、ファイルサイズがゼロのファイルが作成されないように
出力のところを変更し解決しました

ありがとうございました

Re:ファイルサイズ0のファイルが削除できない

Posted: 2010年5月20日(木) 22:32
by Poco
こういう時はDeleteFile()が失敗した時のエラー番号をGetLastError()で取得することを
お勧めします。