C++ 如何将文件保存到C++;?

C++ 如何将文件保存到C++;?,c++,visual-c++,C++,Visual C++,我想找到一种将文件保存到桌面的方法。由于每个用户都有不同的用户名,我发现下面的代码可以帮助我找到其他人桌面的路径。但如何将以下内容保存到桌面文件.open(appData+“/.txt”)不起作用。你能给我举个例子吗 #include <iostream> #include <windows.h> #include <fstream> #include <direct.h> #include <shlobj.h> using names

我想找到一种将文件保存到桌面的方法。由于每个用户都有不同的用户名,我发现下面的代码可以帮助我找到其他人桌面的路径。但如何将以下内容保存到桌面<代码>文件.open(appData+“/.txt”)不起作用。你能给我举个例子吗

#include <iostream>
#include <windows.h>
#include <fstream>
#include <direct.h>
#include <shlobj.h>
using namespace std;
int main ()
{
    ofstream file;  

    TCHAR appData[MAX_PATH];
    if (SUCCEEDED(SHGetFolderPath(NULL,
                                  CSIDL_DESKTOPDIRECTORY | CSIDL_FLAG_CREATE,
                                  NULL,
                                  SHGFP_TYPE_CURRENT,
                                  appData)))

    wcout << appData << endl; //This will printout the desktop path correctly, but
    file.open(appData +"file.txt"); //this doesn't work
    file<<"hello\n";
    file.close();
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
流文件;
TCHAR appData[最大路径];
如果(成功)(SHGetFolderPath(NULL,
CSIDL_桌面目录| CSIDL_标志|创建,
无效的
SHGFP_类型_电流,
appData)))

wcout不能使用
appData+“/.txt”
连接
TCHAR
数组。请使用
stringstream
构造路径并从中提取文件的完整路径:

#include <sstream>

...

std::ostringstream file_path;
file_path << appData << "\\filename.txt";

file.open(file_path.str().c_str());
#包括
...
std::ostringstream文件路径;

文件路径不能使用
appData+“/.txt”
连接
TCHAR
数组。请使用
stringstream
构造路径并从中提取文件的完整路径:

#include <sstream>

...

std::ostringstream file_path;
file_path << appData << "\\filename.txt";

file.open(file_path.str().c_str());
#包括
...
std::ostringstream文件路径;
文件路径
此文件路径中没有文件名

此外,此函数调用无效。应将第二个参数作为打开类型传递

file.open(appData +"/file.txt", fstream::out); 
是正确的

此文件路径中没有文件名

此外,此函数调用无效。应将第二个参数作为打开类型传递

file.open(appData +"/file.txt", fstream::out); 

是正确的。

您应该使用连接路径,它将处理缺少和/或多余的反斜杠(
\
)字符。

您应该使用连接路径,它将处理缺少和/或多余的反斜杠(
\
)字符。

我不确定这是否可用:

file.open(“%userprofile%\\Desktop\\file.txt”,fstream::out);


您可以试试。

我不确定这是否可用:

file.open(“%userprofile%\\Desktop\\file.txt”,fstream::out);



您可以尝试。

Windows路径带有“\`no”,并且您还需要文件名。我认为您正在添加两个字符指针。您希望连接字符串。建议使用stringstream,并将两者都推到它上?此外,您实际上似乎没有输入文件名,只是.txt扩展名。最近很少使用Windows,但是它不会稍微有点说明吗?@都铎C++和C可以使用<代码> /<代码>来进行目录分隔符,甚至在Windows上!但是,你对文件名是正确的,。TXT < /Cord>是一个糟糕的名字。<代码> > TXT < /COD>不是Windows上的有效文件名,您的实际问题是C++,而不是OS。您不能按您想要的方式连接C字符串。没有冒犯的意思,但您是否考虑过阅读介绍?@ NeWeGe,还需要决定如果<代码> SHGetFolderPath < /代码>调用成功,应该执行哪一个语句。。如果成功,您当前将执行
wcout
,然后无条件地执行其余语句。这就是您想要的吗?Windows路径带有“\`no”并且您还需要文件名。我认为您正在添加两个字符指针。您想要连接字符串。建议使用stringstream,并将两者都推到它上?Al所以,实际上,你并没有把文件名放进去,只是.txt扩展。最近没有使用过Windows,但是它不会有点改变吗?@都铎C++和C可以使用<代码> /<代码>来分隔目录,甚至在Windows上。但是,你对文件名是正确的,<代码>。TXT < /Cord>是一个糟糕的名字。<代码> > TXT < /COD>不是Windows上的有效文件名,您的实际问题是C++,而不是OS。您不能按您想要的方式连接C字符串。没有冒犯的意思,但您是否考虑过阅读介绍?@ NeWeGe,还需要决定如果<代码> SHGetFolderPath < /代码>调用成功,应该执行哪一个语句。。如果成功,您当前将执行
wcout
,然后无条件地执行其余语句。这是您想要的吗?但是,TCHAR数组上的+不会连接字符串,它只会添加指针,最后您将得到一个通配符感谢您为我展示一个示例。但是当我使用
file.open(appData+“/file.txt”时,fstream::out);
上面写着,
“/file.txt”
不能以这种方式使用。错误:表达式必须具有integarl或enum类型我认为
ios::out
std::ostream
的默认值。不需要显式传递它。但是,TCHAR数组上的+不连接字符串,它只会添加指针,最后您会得到一个通配符指针感谢您给我一个exa但是当我使用
file.open(appData+“/file.txt”,fstream::out);
它说,
“/file.txt”
不能以那种方式使用。错误:表达式必须具有integarl或enum类型我认为
ios::out
std::ostream
的默认值。不需要显式传递它。它说
file\u path@NewGuy中没有定义file\u path,您是否
包括
并添加变量
std::ostringstream file\u path;
?是的,我更新了我的原始问题,就像你解释汉克斯的方式一样,当我创建一个新项目并再次编译时,它起了作用。但是没有任何东西保存在桌面上。当我使用cout打印文件路径时,它显示的是一个数字,而不是一个数字path@NewGuy,为
ostringstream
字符使用
TCHAR
更新答案键入并使用
\u TEXT()
用于追加文件名的宏。还包括
#include
。如果您是为UNICODE环境构建
TCHAR
将是宽字符串,因此使用
wcout
。如果不是为UNICODE
TCHAR
构建,则将是
char
并使用
cout
。它表示
文件中未定义文件路径_
file.open(appData +"/file.txt", fstream::out);