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 回答