1

c++ 中是否有将文件(.txt)写入桌面的默认代码,可以在不知道前导 /desktop 的情况下用于任何计算机?

4

3 回答 3

3

最便携的方式是使用 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 支持的发行版和操作系统中顺利运行,包括但限于:

  • 视窗

  • Linux

  • 苹果电脑

  • QNX

等等。

于 2014-04-27T09:13:47.923 回答
0

SHGetKnownFolderPath与 FOLDERID_Desktop(Vista 及更高版本)一起使用,或者与SHGetFolderPath获取CSIDL_DESKTOP代表当前用户桌面的文件夹。取决于您的 Windows 版本目标,有几个功能,其中一些已弃用。

于 2014-04-27T09:12:22.740 回答
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;
}
于 2014-04-27T09:07:27.570 回答