2

みなさん、はじめまして。

私の問題は、私のプログラムが別のプログラムによって読み取られるファイルを作成し、その後私のプログラムがファイルを削除する必要があることです。

以下のコードを使用して、ファイルが存在するかどうか、および他のプログラムがそのファイルを使用しているかどうかを確認します。その後、ファイルを削除したい:

if(isFileRdy("C:\\test\\foo.txt"))remove("C:\\test\\foo.txt");

問題がどこにあるのか、誰にも分かりますか。興味深いことに、これは他のファイルでも機能します。また、foo.txt特別なアクセス権なしでこのプログラムによって作成されます。

ありがとう :)

/* just suppose the things with argc and argv work, I know it's uggly
   but I need it as a call back function later in the code */

BOOL isFileRdy(char *filePath)
{
    int argc = 1;
    void *argv[1];
    argv[0]= (void*) filePath;
    return isFileRdyCBF(argv, argc);
}


BOOL isFileRdyCBF(void *argv[], int argc)
{
/* I used */
    char *filePath = (char*) argv[0];
    FILE *fDes = NULL;
    BOOL _fileExists = FALSE;
    BOOL _fileBussy = TRUE;

    _fileExists = fileExists(filePath);

    if(_fileExists)
    {
        fDes = fopen(filePath, "a+");
        if(fDes!=NULL)
        {
            _fileBussy = FALSE;
            if(fclose(fDes)!=0)
            {
                printf("\nERROR could not close file stream!");
                printf("\n      '%s'\n\n", filePath);
                return FALSE;
            }
        }
    }

    return (_fileExists==TRUE && _fileBussy==FALSE) ? TRUE : FALSE;
}
4

2 に答える 2

3

他のファイルでも機能するとおっしゃっています。あなたのために働くこれらのパスはどのように見えますか? 全体の問題は、バックスラッシュ\を正しく使用していないことにある可能性があります。

C では\t 、タブ文字を意味します。だからあなたは書いC:<TAB>testた。\C でバックスラッシュ文字を実際に表現するには、 と書き\\ます。(特殊なコードを表現するために、さまざまな文字の前にバックスラッシュを付けるこの作業は、「エスケープ」と呼ばれます。)

たとえば、remove("C:\test\foo.txt");あなたが書く 代わりにremove("C:\\test\\foo.txt");

これも機能するはずですremove("c:/test/foo.txt");。Windows はパスにバックスラッシュ/の代わりにスラッシュを使用できるためです。\

また、argvについてRudiが言ったこと。

于 2017-01-03T12:05:08.417 に答える