2014-06-12 128 views
0

我正在努力解决一个奇怪的问题。 我要创造我的程序的解决方案的文件夹,我已经写了下面的代码:_mkdir奇怪的行为C++

timer = time(NULL); 
path.assign(".\\Solution_"); 
path.append(ctime(&timer)); 
ch1 = ':'; 
ch2 = '_'; 
for (i = 0; i < path.length(); ++i) { 
    if (path[i] == ch1 || path[i] == ' ') 
    path[i] = ch2; 
    } 

mkdir(path.c_str()); 

它不创造任何即使路径等于“ \ Solution_Thu_Jun_12_10_10_31_2014”如果我输入

mkdir(".\\test"); 

它工作正常。 我做了很多测试,我尽我所能,但我无法弄清楚什么是错的。 任何人都可以帮助我吗? 最佳, 罗伯托

详细信息: 即使我使用mkdir(path.c_str());与路径等于“Solution_Thu_Jun_12_11_52_04_2014”(没有任何\),它不反正工作,并在另一边“的mkdir(‘测试’);”作品。

解决方案: 好吧,有一个隐藏的换行符。 感谢大家的帮助: - )!!!

+0

你在嵌入式系统上运行? IIRC mkdir不是该标准的一部分。 –

+1

该问题是由于通过反斜杠'\'逃脱。做'。\\解决方案...'应该可以工作。 –

+0

当你在'mkdir(path.c_str())之前'cout path.cstr()'时输出什么?如果用'mkdir(“。\\ Solution_Thu_Jun_12_10_10_31_2014”);''替换mkdir(“。\\ test”);它会工作正常吗? – Aserre

回答

0

您遇到的问题是反斜杠字符是转义序列的开始。这些用于向流中输入一个不可打印的字符(制表符,回车符等)。

所以你的程序看到一个反斜杠,并期待下一个字符将是一个命令字符。如果它看到另一个反斜杠,那么它知道你想要一个反斜杠而不是一个转义序列,因此\\工作和\不。

由于您正在运行Windows的风格,您可以使用CreateDirectory函数。

此外,你已经把你的例子是C,而不是C++。你从哪里学习?

+0

是的,这是C ...我使用的环境是MS Visual C++快速版。这只是误导:-) – StopThePigeon

+0

我不想使用CreateDirectory函数,我没有得到你所说的“...因此,为什么\作品和\不。” 您建议的解决方法是什么? – StopThePigeon

+0

我认为值得一提的是,如果我使用'mkdir(path.c_str());路径等于“Solution_Thu_Jun_12_11_52_04_2014”(没有任何\),但它无法正常工作,'mkdir(“test”);'作品。 – StopThePigeon

0

检查窗口中是否存在换行符或其他非法字符。你的错误看起来像那样。

Windows不允许在文件名字符这些<>?/\| or newline