创建一个新文件夹
string newFolder = Globals.applicationPath + @"BatchHistoryBatch" + DateTime.Now.ToString("M/d/yyyy HHmmss") + @"";
在开发PC中,一切都按预期工作,文件夹命名为:"Batch12-23-2019 181504">
将控制台应用部署到服务器时,文件夹名称显示为"Batch12">
知道为什么吗?
侧面细节:
- .NET 框架 4.7.2
- 输出类型:控制台应用
- 本地开发环境:Win10
- 已部署环境:WinSrv 2016
问题实际上是部署位置上的区域性设置。
您的DateTime.Now.ToString()
方法也可能在部署的位置上创建"某些"格式,但正斜杠(/
(不能是Windows中文件夹名称的一部分。
发件人:命名文件、路径和命名空间
The following reserved characters: < (less than) > (greater than) : (colon) " (double quote) / (forward slash) (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk)
当您尝试命名文件夹时,它看起来像是在"第一个"/
字符部分之前分配的,这在您的情况下是Batch12
。
请记住,自定义日期字符串上的"/"
自定义格式说明符具有"替换我当前区域性或提供的区域性日期分隔符"的特殊含义。在你的开发电脑中,你的CurrentCulture
的DateSeparator
属性似乎 - 这就是为什么它在结果字符串中。
这意味着已部署服务器的CurrentCulture
正在使用/
作为DateSeparator
,这就是为什么当您使用该方法时,它仍然/
ToString
。
我建议您在开发和部署的服务器上使用相同的区域性设置。或者,您可以在代码中将日期分隔符从/
更改为-
,例如;
string newFolder = Globals.applicationPath + @"BatchHistoryBatch" +
DateTime.Now.ToString("M-d-yyyy HHmmss") + @"";