【发布时间】:2011-10-16 03:36:28
【问题描述】:
我尝试创建一个新文件并将其保存在 LINUX 上当前文件夹的子目录中
路径(转换)应该类似于 markus/123456,其中 markus 是(现有的)子目录,而 123456 是不存在的文件
奇怪的是:当我不使用子目录时它可以工作:
"123456" 工作并在当前目录中创建一个文件
"markus/123456" 不起作用,什么也不做......
ofstream handle;
string convert = "1234";
convert=name +"/"+ convert;
cout << convert<< endl;
handle.open(convert.c_str(),ios::out); // dont works with subdirectory in string
handle<<message;
handle.close();
注意:我使用的是 linux 而不是 windows。我需要 linux (3.0.0-12-generic-pae) 的解决方案。
编辑: 感谢其中一个赞扬,我发现它是一个正确的问题。我发布了我如何创建文件夹的代码:
user::user(string aaa)
{
name=aaa;
mkdir(name.c_str(),0600);
}
注意:我也用 0666 尝试过,但没有成功。还是不知道怎么弄好
【问题讨论】:
-
它产生什么输出?你得到什么错误?
-
请将您的程序缩减为一个最小的、完整的、可编译的示例程序。在这个过程中,你很可能会自己发现问题。如果您不这样做,完整的程序将使我们能够更快地找到问题。请参阅sscce.org 了解更多信息。
-
它不会在终端上产生任何输出。 ofstream 只是无法打开。如果我在它拒绝之后使用
handle.isopen();。如果我不使用它只是成功的路径 -
所以它应该可以工作。这表明您要么拼写错误,从错误的目录运行它(因为路径将与当前工作目录相对(假设第一个字符不是'/')),要么没有对该目录的写权限。你检查过当前的工作目录吗?试试
getcwd()看看它输出了什么。 -
感谢您的提示!这是一个正确的问题。我删除了目录并手动创建了它。之后我就可以写作了。
mkdir(name.c_str(),0600);是之前创建目录的命令。name是类的一部分,与我之前的示例相同。这部分也不能不同,因为我在同一目录中创建目录和文件(在“123456”示例中)。