首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有额外":“或"-”c++的文件名

带有额外":“或"-”c++的文件名
EN

Stack Overflow用户
提问于 2013-03-25 17:06:05
回答 3查看 211关注 0票数 2

我想创建一个包含":“、"-”等字符的文件名。我尝试使用以下代码将日期和时间附加到我的文件名中。

代码语言:javascript
复制
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失败我认为问题出在包含":“和"-”的新文件名上

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-25 17:36:05

“我想创造...”不,你不需要。不同的系统对文件名中的合法内容施加了不同的限制。大多数现代系统都允许相当长的名称(比如超过100个字符),并且不会强加于它们的格式(尽管Windows仍然会处理最后一个.之后的任何内容,如果有的话,特别是,所以你要小心)。如果您不关心可移植性,您可以简单地遵循您所使用的系统的规则:在Unix下,没有'/''\0' (但我也会避免Unix shell认为是元字符的任何东西:至少是()[]{}<>!$|?*" \和反引号中的任何内容),并且我会避免以'-'开头的文件名。Windows正式禁止<>:"/\|?*中的任何东西;在这里,我会避免任何其他程序可能认为特殊的东西(包括使用两个%,它可以解释为.变量),而且我还会小心,如果有.something,最后的shell对系统是有意义的。(如果文件名已经以.log之类的名称结尾,则在此之前使用其他点是没有问题的。)

在大多数情况下,最好是保守一点;您永远不知道将来会使用什么系统。在我自己的工作中(在Linux下创建了一个带有冒号的文件名,在Windows下甚至不能删除它),我基本上采用了只允许'-','_‘和字母数字字符的规则(以及禁止只区分大小写的文件名--我认识的很多人只会使用小写字母)。这比Unix和Windows的限制要多得多,但谁知道未来会发生什么呢。(对于我过去工作过的一些系统来说,它也太自由了。然而,这些都有望一去不复返。)

票数 2
EN

Stack Overflow用户

发布于 2013-03-25 17:07:52

实际上,您不能在windows文件名中使用:字符。将其替换为其他内容。如果程序依赖于名称,则修改它以解释备用分隔符。

票数 3
EN

Stack Overflow用户

发布于 2013-03-26 14:57:47

Windows不允许将少数特殊字符创建为文件名。

但是,对于使用当前日期和时间创建文件名,您可以使用此格式。

代码语言:javascript
复制
CTime CurrentTime( CTime::GetCurrentTime() );
SampleFileName = CurrentTime.Format( _T( " %m_%d_%y %I_%M_%S" ) ) + fileExtension;

有关更多时间格式,请参阅this

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15611057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档