0

アンインストール中にアプリケーションによって作成されたすべての一時ファイルを削除しようとしています。次のコードを使用します。

 bool DeleteFileNow( QString filenameStr )
    {
        wchar_t* filename;
        filenameStr.toWCharArray(filename);

        QFileInfo info(filenameStr);

        // don't do anything if the file doesn't exist!
        if (!info.exists())
            return false;

        // determine the path in which to store the temp filename
        wchar_t* path;
        info.absolutePath().toWCharArray(path);

        TRACE( "Generating temporary name" );
        // generate a guaranteed to be unique temporary filename to house the pending delete
        wchar_t tempname[MAX_PATH];
        if (!GetTempFileNameW(path, L".xX", 0, tempname))
            return false;

        TRACE( "Moving real file name to dummy" );
        // move the real file to the dummy filename
        if (!MoveFileExW(filename, tempname, MOVEFILE_REPLACE_EXISTING))
        {
            // clean up the temp file
            DeleteFileW(tempname);
            return false;
        }

         TRACE( "Queueing the OS" );
        // queue the deletion (the OS will delete it when all handles (ours or other processes) close)
        return DeleteFileW(tempname) != FALSE;
    }

アプリケーションがクラッシュします。実行された操作の一部の Windows dll が欠落しているためだと思います。Qt だけを使用して同じ操作を実行する他の方法はありますか?

4

2 に答える 2

1

Roku は、QString と wchar_t* を操作する際の問題について既に説明しています。ドキュメントを参照してください: QString クラス リファレンス、メソッド toWCharArray :

int QString::toWCharArray ( wchar_t * array ) const

この QString オブジェクトに含まれるデータで配列を埋めます。配列は、wchar_t が 2 バイト幅のプラットフォーム (Windows など) では utf16 でエンコードされ、wchar_t が 4 バイト幅のプラットフォーム (ほとんどの Unix システム) では ucs4 でエンコードされます。

配列は呼び出し元によって割り当てられ、完全な文字列を保持するのに十分なスペースが含まれている必要があります(文字列と同じ長さの配列を割り当てることで常に十分です)。

配列内の文字列の実際の長さを返します。

于 2012-10-12T21:56:01.753 に答える
0

Qt を使用してファイルを削除する方法を単に探している場合は、次を使用しますQFile::remove

QFile file(fileNameStr);
file.remove(); // Returns a bool; true if successful

一時ファイルのライフサイクル全体を Qt で管理したい場合は、以下をご覧くださいQTemporaryFile

QTemporaryFile tempFile(fileName);
if (tempFile.open())
{
   // Do stuff with file here
}

// When tempFile falls out of scope, it is automatically deleted.
于 2012-10-12T21:12:19.240 に答える