Запись файла по умолчанию на рабочий стол

Существует ли код по умолчанию в c ++ для записи файла (.txt) на рабочий стол, который можно использовать для любого компьютера, не зная ведущего / рабочего стола?

1

Решение

Наиболее переносимым способом является использование Qt, а именно QStandardPaths.

Стандартная библиотека не имеет никакой дополнительной поддержки, поэтому вам нужно будет либо заново изобрести колесо, либо найти надежное решение, которое уже существует. Qt такая вещь.

QStandardPaths :: DesktopLocation 0 Возвращает каталог рабочего стола пользователя.

В этом случае вы можете использовать QFile а также ofstream, чтобы записать файл в эту папку. Вам нужно будет только зависеть от QtCore за это.

Код будет выглядеть так:

#include <QFile>
#include <QStandardPaths>
#include <QDebug>
#include <QTextStream>

...

QFile file(QStandardPaths::locate(QStandardPaths::DesktopLocation, ""));
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug() << "Failed to open";

QTextStream out(&file);

// Done, yay!

Это будет аккуратно работать с дистрибутивами и операционными системами, которые поддерживает QtCore, включая, но не ограничиваясь:

  • Windows

  • Linux

  • макинтош

  • QNX

и так далее.

3

Другие решения

использование SHGetKnownFolderPath с FOLDERID_Desktop (Vista и более поздние версии), в качестве альтернативы SHGetFolderPath с CSIDL_DESKTOP получить папку, которая представляет рабочий стол для текущего пользователя. Зависит от ваших целей версии Windows, есть несколько функций, и некоторые из них устарели.

0

Просто используйте стандартный заголовок fstream с getenv:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <sstream>
using namespace std;

int main (int argc, char **argv)
{
if(argc != 2)
{
cerr << "usage: " << argv[0] << " filename" << endl;
return 1;
}

std::ostringstream oss;

#ifdef _WIN32

oss << getenv("HOMEDRIVE") << getenev("HOMEPATH");

#else

oss << getenv("HOME");

#endif

oss << "/" << argv[1];

ofstream f;
f.open (oss.str().c_str());
f << "bar";
f.close();
return 0;
}
0
По вопросам рекламы [email protected]