Существует ли код по умолчанию в c ++ для записи файла (.txt) на рабочий стол, который можно использовать для любого компьютера, не зная ведущего / рабочего стола?
Наиболее переносимым способом является использование 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
и так далее.
использование SHGetKnownFolderPath
с FOLDERID_Desktop (Vista и более поздние версии), в качестве альтернативы SHGetFolderPath
с CSIDL_DESKTOP
получить папку, которая представляет рабочий стол для текущего пользователя. Зависит от ваших целей версии Windows, есть несколько функций, и некоторые из них устарели.
Просто используйте стандартный заголовок 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;
}