为了账号安全,请及时绑定邮箱和手机立即绑定

C# tostring("yyyy/MM/dd")的奇怪问题

/ 猿问

C# tostring("yyyy/MM/dd")的奇怪问题

守候你守候我 2018-12-06 14:38:07

我希望分别按年,月,日创建对应的目录来存放上传的文件,但是碰到了如下问题:

先看代码

string folder = DateTime.Now.ToString("yyyy/MM/dd");
string path = System.IO.Path.Combine(Server.MapPath("~/File/EFax"), folder);
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}

在本地(win7,IIS7)中成功的分别按年,月,日创建了对应的目录,例如:

D:\webSite\File\EFax\2010\7\23

但是发布到server2003 之后确不对了,变成了

D:\webSite\File\EFax\2010-7-23

也就是只生成了一个名为2010-7-23的目录!

请问有谁碰到此问题,是什么原因呢?

当然解决方法很简单,但是想知道产生的原因是什么....

查看完整描述

16 回答

?
明月笑刀无情

如果你要生成D:\webSite\File\EFax\2010\7\23这样的路径的话,需要将年,月,日分别创建,

先创建年文件夹、然后是月,最后是日。

string folder = DateTime.Now.ToString("yyyy/MM/dd");这种方式的话文件系统是不能识别的(你这算是取巧,可惜没成功),最后还是会转译成2010-7-23

查看完整回答
反对 回复 2019-01-21
?
至尊宝的传说

在win7下可以?还真是不知道。。。

查看完整回答
反对 回复 2019-01-21
?
POPMUISE

DateTime.Now.ToString("yyyy\\MM\\dd");

查看完整回答
反对 回复 2019-01-21
?
DIEA
谢谢你提供的解决方法,但是我目的是想知道具体原因是什么...
查看完整回答
反对 回复 2019-01-21
?
慕神8447489
这样的话在2003上会出现2010M7d23,还是一个文件夹
查看完整回答
反对 回复 2019-01-21
?
SMILET
@顾磊(kyo-yo):DateTime.Now.ToString(@"yyyy\\MM\\dd"); DateTime.Now.ToString("yyyy\\\\MM\\\\dd");
查看完整回答
反对 回复 2019-01-21
?
慕的地2183247
@Galactica:果然可行。。受教了!
查看完整回答
反对 回复 2019-01-21
?
Qyouu
本来这个DateTime.Now.ToString("yyyy\\MM\\dd"),我在VB.NET下试验是2010M7d23,只能使用DateTime.Now.ToString("yyyy\\\\MM\\\\dd")
查看完整回答
反对 回复 2019-01-21
?
慕慕0277861
@顾磊(kyo-yo):路径分隔符,要转义.\ 在unicode 字符串中得用 \\ 来表示,当读入 \\ 后,系统就认为 \\ 等于 \ ,然后再把 \ 和后面的 M 连起来,就把 M 转义成 M 了,而不是让 M和第二个M连起来通配 月份.依次类推.
查看完整回答
反对 回复 2019-01-21
?
烙印99
各位的解释是合理的,我也明白,但我的重点是:不知道大家有没有在不同的服务器下得出不同的结果..
查看完整回答
反对 回复 2019-01-21
?
holdtom
@沧海月明.:string folder = DateTime.Now.ToString("yyyy\\/MM\\/dd");到哪个平台都一样,不会变"2010-7-23".
查看完整回答
反对 回复 2019-01-21
?
函数式编程
DateSeparator 在win7下是 / ;在 2003下是 -,可以通过DateTimeFormatInfo查看.在分析FormatString的时候,如果从中找到了 / ,那么系统会自动将其替换成 DateTimeFormatInfo.DateSeparator.所以你会看到两种结果. 我这样写,string folder = DateTime.Now.ToString("yyyy\\/MM\\/dd");系统会在第一次分析FormatString的时候把 / 作为字符读入,而不会替换成 DateTimeFormatInfo.DateSeparator.
查看完整回答
反对 回复 2019-01-21
?
翻翻过去那场雪

一般文件名称都不允许含有特殊字符,难道楼上的各位都没有发现?

查看完整回答
反对 回复 2019-01-21
?
慕虎7371278
的确是不允许有特殊字符,问题是,楼主所描述的问题最终原因和建文件夹没关系,是DateTime.Now.ToString()转换的问题
查看完整回答
反对 回复 2019-01-21
?
慕仙森
是啊,我的问题和有没有特殊字符没关系,我是在描述创建目录的过程。
查看完整回答
反对 回复 2019-01-21
?
白衣染霜花

今天 在XP上也突然发现了这个问题,DateTime("2012-12-10").ToString("yyyy/MM/dd"),发现显示2012-12-10,让我很是奇怪,后来找到了方法改为,DateTime("2012-12-10").ToString("yyyy\\/MM\\/dd"),结果显示正常,但是不知道原因,看了上面的讨论,解决了困惑,感谢各位

查看完整回答
反对 回复 2019-01-21
  • 16 回答
  • 0 关注
  • 352 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信