1

我是 C++ 编程的新手(自大学以来 10 岁以上没有做过),我正在尝试编写一个非常基本的程序来获取已作为参数传递的文件名。我只是不知道如何获取文件名。我正在使用 VS2012 Exp for Desktop。

下面是我的代码。

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <xstring>
#include <string>

//using namespace openutils;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    wcout << "customconsole app has "<< argc <<" arguments passed.  second one is:  " << argv[1];
    ofstream me_attach_file;
    wstring newfilename = argv[1] && ".newext";
    me_attach_file.open (".mailexpress");
    me_attach_file << "Writing this to a file.\n";
    me_attach_file.close();
return 0;
}
4

3 回答 3

3

替换这个

wstring newfilename = argv[1] && ".newext";

wstring newfilename = argv[1];
newfilename += L".newext";

一些语言&用于字符串连接。C++ 没有。事实上,没有连接字符串文字和字符指针的运算符:+因为字符串连接由字符串对象定义并且仅适用于它们。

此外,字符串文字必须加上前缀L才能使用宽字符并兼容wstring.

于 2013-06-06T15:54:01.877 回答
3

&&不会将两个字符串加在一起。+运算符可以。

此外,C++通过左侧参数的类型决定使用众多operator +函数中的哪一个。您在这里有两种不同的类型,一个_TCHAR字符串,一个类型为char*的字符串文字( “这是一个字符串文字”),您希望将其放入 wstring。

首先,_TCHARchar*不是同一类型,所以它应该是L".newext"

其次,您不能添加两个char *,因为那是添加两个指针,而指针算术的作用与您想要的不同。因此,在开始添加内容之前,需要将第一个参数转换为wstring 。

任何一个:

wstring myStr = argv[1];
myStr += L".newext"

或者:

wstring myStr = wstring(argv[1]) + L".newext" + L"Additional stuff"
于 2013-06-06T16:00:04.087 回答
0

在行中

me_attach_file.open (".mailexpress");

您应该将文件名传递给对象。

me_attach_file.open (newfilename);

在您的版本中,ofstream 将打开一个名为“.mailexpress”的不带前缀的文件(在 unix 系统上隐藏)。

于 2013-06-06T15:59:28.330 回答