首页 新闻 会员 周边

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

0
悬赏园豆:10 [已解决问题] 解决于 2010-07-23 15:19

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

先看代码

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的目录!

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

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

沧海月明.的主页 沧海月明. | 初学一级 | 园豆:169
提问于:2010-07-23 10:33
< >
分享
最佳答案
0

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

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

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

收获园豆:5
kyo-yo | 大侠五级 |园豆:5587 | 2010-07-23 10:52
是的,这的确是取巧,但是为什么在win7,IIS7 下可以,而在server 2003,IIS6下不可呢?另外 这种方式为什么会转移?是DateTime转义的,还是System.IO.Directory转义的呢?
沧海月明. | 园豆:169 (初学一级) | 2010-07-23 11:00
是DateTime.ToString转义的,在WIN7上会直接转成2010/7/23,而2003上则会转成2010-7-23,应该是操作系统的关系
kyo-yo | 园豆:5587 (大侠五级) | 2010-07-23 11:20
@顾磊(kyo-yo): 嗯,我觉得也是,你说的有道理!
沧海月明. | 园豆:169 (初学一级) | 2010-07-23 15:17
其他回答(4)
0

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

顾晓北 | 园豆:10844 (专家六级) | 2010-07-23 11:08
1

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

收获园豆:5
Launcher | 园豆:45045 (高人七级) | 2010-07-23 11:11
谢谢你提供的解决方法,但是我目的是想知道具体原因是什么...
支持(0) 反对(0) 沧海月明. | 园豆:169 (初学一级) | 2010-07-23 11:20
这样的话在2003上会出现2010M7d23,还是一个文件夹
支持(0) 反对(0) kyo-yo | 园豆:5587 (大侠五级) | 2010-07-23 11:23
@顾磊(kyo-yo):DateTime.Now.ToString(@"yyyy\\MM\\dd"); DateTime.Now.ToString("yyyy\\\\MM\\\\dd");
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-07-23 11:58
@Galactica:果然可行。。受教了!
支持(0) 反对(0) kyo-yo | 园豆:5587 (大侠五级) | 2010-07-23 12:19
本来这个DateTime.Now.ToString("yyyy\\MM\\dd"),我在VB.NET下试验是2010M7d23,只能使用DateTime.Now.ToString("yyyy\\\\MM\\\\dd")
支持(0) 反对(0) kyo-yo | 园豆:5587 (大侠五级) | 2010-07-23 12:22
@顾磊(kyo-yo):路径分隔符,要转义.\ 在unicode 字符串中得用 \\ 来表示,当读入 \\ 后,系统就认为 \\ 等于 \ ,然后再把 \ 和后面的 M 连起来,就把 M 转义成 M 了,而不是让 M和第二个M连起来通配 月份.依次类推.
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-07-23 12:35
各位的解释是合理的,我也明白,但我的重点是:不知道大家有没有在不同的服务器下得出不同的结果..
支持(0) 反对(0) 沧海月明. | 园豆:169 (初学一级) | 2010-07-23 15:15
@沧海月明.:string folder = DateTime.Now.ToString("yyyy\\/MM\\/dd");到哪个平台都一样,不会变"2010-7-23".
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-07-23 16:30
DateSeparator 在win7下是 / ;在 2003下是 -,可以通过DateTimeFormatInfo查看.在分析FormatString的时候,如果从中找到了 / ,那么系统会自动将其替换成 DateTimeFormatInfo.DateSeparator.所以你会看到两种结果. 我这样写,string folder = DateTime.Now.ToString("yyyy\\/MM\\/dd");系统会在第一次分析FormatString的时候把 / 作为字符读入,而不会替换成 DateTimeFormatInfo.DateSeparator.
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-07-23 16:36
0

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

杨—— | 园豆:214 (菜鸟二级) | 2010-07-23 14:02
的确是不允许有特殊字符,问题是,楼主所描述的问题最终原因和建文件夹没关系,是DateTime.Now.ToString()转换的问题
支持(0) 反对(0) kyo-yo | 园豆:5587 (大侠五级) | 2010-07-23 14:21
是啊,我的问题和有没有特殊字符没关系,我是在描述创建目录的过程。
支持(0) 反对(0) 沧海月明. | 园豆:169 (初学一级) | 2010-07-23 15:13
0

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

思想 | 园豆:202 (菜鸟二级) | 2013-05-31 14:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册