我想创建一个包含":“、"-”等字符的文件名。我尝试使用以下代码将日期和时间附加到我的文件名中。
Str.Format(_T("%d-%d-%d-%d:%d:%d.log"),systemTime.wDay ,systemTime.wMonth ,systemTime.wYear,systemTime.wHour,systemTime.wMinute,systemTime.wSecond);
std::wstring NewName=filename.c_str() + Str;
MoveFileEx(oldFilename.c_str(), NewName.c_str(), 2 )windows ErrorCode 123(ERROR_INVALID_NAME) MoveFileEx失败我认为问题出在包含":“和"-”的新文件名上
谢谢,
发布于 2013-03-25 17:36:05
“我想创造...”不,你不需要。不同的系统对文件名中的合法内容施加了不同的限制。大多数现代系统都允许相当长的名称(比如超过100个字符),并且不会强加于它们的格式(尽管Windows仍然会处理最后一个.之后的任何内容,如果有的话,特别是,所以你要小心)。如果您不关心可移植性,您可以简单地遵循您所使用的系统的规则:在Unix下,没有'/'或'\0' (但我也会避免Unix shell认为是元字符的任何东西:至少是()[]{}<>!$|?*" \和反引号中的任何内容),并且我会避免以'-'开头的文件名。Windows正式禁止<>:"/\|?*中的任何东西;在这里,我会避免任何其他程序可能认为特殊的东西(包括使用两个%,它可以解释为.变量),而且我还会小心,如果有.something,最后的shell对系统是有意义的。(如果文件名已经以.log之类的名称结尾,则在此之前使用其他点是没有问题的。)
在大多数情况下,最好是保守一点;您永远不知道将来会使用什么系统。在我自己的工作中(在Linux下创建了一个带有冒号的文件名,在Windows下甚至不能删除它),我基本上采用了只允许'-','_‘和字母数字字符的规则(以及禁止只区分大小写的文件名--我认识的很多人只会使用小写字母)。这比Unix和Windows的限制要多得多,但谁知道未来会发生什么呢。(对于我过去工作过的一些系统来说,它也太自由了。然而,这些都有望一去不复返。)
发布于 2013-03-25 17:07:52
实际上,您不能在windows文件名中使用:字符。将其替换为其他内容。如果程序依赖于名称,则修改它以解释备用分隔符。
发布于 2013-03-26 14:57:47
Windows不允许将少数特殊字符创建为文件名。
但是,对于使用当前日期和时间创建文件名,您可以使用此格式。
CTime CurrentTime( CTime::GetCurrentTime() );
SampleFileName = CurrentTime.Format( _T( " %m_%d_%y %I_%M_%S" ) ) + fileExtension;有关更多时间格式,请参阅this
https://stackoverflow.com/questions/15611057
复制相似问题