0

出于某种原因,似乎 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;
}

谢谢

4

2 回答 2

0

ReadAllLines 不会像描述的那样格式化日期,我无法复制这个问题。

去掉多余ToString()

unescape = line.ToString().Replace("\"", "");

因为它已经是一个字符串,所以这里的参数可能会错误地格式化该行。

哦,请确保您在文本编辑器中查看物理文件,而不是进行比较,否则看起来会有所不同。

你能发布一些不能正常工作的示例日期吗?

于 2015-07-15T12:48:48.853 回答
0

没有那么多的答案,但它似乎仍然是我的问题的解决方案。

  1. 关闭所有应用程序
  2. 运行 ccleaner 清理
  3. 重新安装 Visual Studio
  4. 重新安装 dotnet 框架 4.5.2
  5. 注册框架

并且过于谨慎地在一个普通的新项目中重写了我的代码。

神奇的是,现在一切正常。


我想我现在知道医生用抗生素击中虫子的感觉(你不完全确定是什么把戏或导致了问题,但它已经解决了)

于 2015-07-16T06:51:34.337 回答