出于某种原因,File.ReadAllLines似乎有一个奇怪的问题,将所有日期从yyyy/mm/dd转换为yy/mm/dd。
问题是,我正在处理历史数据,这些数据可以追溯到1901年以后,从而导致了速记日期表示法的问题.
public static string[] readFileToStringArray(string filePath = null, string fileName = null)
{
string[] lines = null;
if (File.Exists(filePath + fileName))
{
//lines = File.ReadAllLines(filePath + fileName);
lines = File.ReadAllLines(filePath + fileName, Encoding.UTF8);
string unescape = String.Empty;
List<string> thisCSV = new List<string>();
foreach (string line in lines)
{
unescape = line.Replace("\"", "");
thisCSV.Add(unescape );
}
lines = thisCSV.ToArray();
}
return lines;
}奇怪的是,它并不是对所有的文件都这样做,我有几个运行这个脚本。然后我检查了物理文件,那里的一切都井然有序。
它是一个有效的CSV,一切都封装为文本。


是否知道如何否定这一点,因为修复内存/流中的整个数据集是不可能的?已经检查了MSDN,但没有任何帮助。
此时所涉及的唯一其他代码是一个助手方法,但与它无关,因为它所做的唯一事情就是创建一个文件名列表。
public static List<string> GetFilesinDirectory(string filesPath)
{
List<string> files = new List<string>();
string physicalFilesPath = (string)HttpContext.Current.Server.MapPath(filesPath);
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(physicalFilesPath);
foreach (var file in dir.GetFiles())
{
string thisfile = physicalFilesPath + "\\" + (string)file.Name;
files.Add(thisfile);
}
return files;
}谢谢
发布于 2015-07-15 12:48:48
ReadAllLines永远不会像描述的那样格式化日期,而且我无法复制这个问题。
将多余的ToString()从
unescape = line.ToString().Replace("\"", "");因为它已经是一个字符串了,这里的参数可能会不正确地格式化行。
哦,确保你在文本编辑器中查看的是物理文件,而不是用于比较,否则它看起来就不一样了。
你能发布一些不能正常工作的示例日期吗?
发布于 2015-07-16 06:51:34
与其说是答案,不如说是解决我的问题的办法。
为了谨慎起见,在一个普通的新项目中重写了我的代码。
神奇的是,一切都像现在应该的那样运作。
~~我想我现在知道了医生用抗生素感染细菌的感觉(你不完全确定是什么把戏,也不知道是什么引起了问题,但它已经解决了)~
https://stackoverflow.com/questions/31430317
复制相似问题