2

私のプログラムは、処理するファイルを選択するようにユーザーに促します。私のプログラムはそれを処理し、ファイルを AppData に保存しようとします。

これは私がそれを行う方法です:

QSettings settings(QSettings::IniFormat, QSettings::UserScope, "FlameTool", "FlameTool");
addin_path = QFileInfo(settings.fileName()).absolutePath() + "/addins/" + id + ".limod" ;
qDebug(addin_path.toLocal8Bit());

if(QFile::copy(QDir::toNativeSeparators(file_passed),QDir::toNativeSeparators(addin_path)))
    qDebug("copied");
else
    qDebug("not copied");

コードのこの部分が実行されるたびに、「コピーされていません」と出力されます。ファイルをコピーするにはどうすればよいですか?

4

2 に答える 2

5

あなたが望むことをするために、代わりに QStandardPaths クラスを使用することをお勧めします:

たとえば、main.cpp にアプリケーション名を設定します。

int main(...)
{
    [..]
    a.setApplicationName("FlameTool");
}

ファイルをコピーします。

QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
QDir dir(addin_path);
if (!dir.exists())
    dir.mkpath(addin_path);
if (!dir.exists("addins"))
    dir.mkdir("addins");

dir.cd("addins");
addin_path = dir.absoluteFilePath(id + ".limod");
if (QFile::exists(addin_path))
    QFile::remove(addin_path);

if(QFile::copy(file_passed, addin_path))
    qDebug("copied");
else
    qDebug("not copied");

次の点にも注意してください。

newName という名前のファイルが既に存在する場合、copy() は false を返すことに注意してください (つまり、QFile はそれを上書きしません)。

于 2014-03-10T16:42:12.117 に答える