2015-07-15 3 views
0

почему-то кажется File.ReadAllLines имеет сверхъестественную проблему, конвертирующую все даты с yyyy/mm/dd в yy/mm/dd.Дата выпуска с C# File.ReadAllLines()

Проблема в том, что я работаю с историческими данными, которые могут отбросить все прошло до 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; 
} 

Weird вещь он не делает это ко всем файлам, у меня есть несколько запуска этого сценария. Затем я проверил физический файл, и все в порядке.

Это действительный CSV, все инкапсулируется как текст.

Source:

Result:

Любая идея, как отрицать это, как исправление весь набор данных в памяти/поток может быть и речи? уже проверен 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; 
} 

Благодаря

+0

readalllines не делает ничего особенного, а затем читает строки, закрывает глаза и дает вам данные как есть. Проверьте http://referencesource.microsoft.com/#mscorlib/system/io/file.cs,8d10107b7a92c5c2. – user734028

+0

@ user734028 благодарю вас за ссылку, именно мои мысли, поэтому это так странно, что вы можете видеть из моих скриншотов значение даты, искаженное. Единственный другой исполняемый код - это метод массового файла get._ – LokizFenrir

+0

точно мой вопрос, это не должно происходить (когда-либо), и, следовательно, мой вопрос, на данный момент это очень простое приложение, с очень простой csv (4937 строк едва царапины). – LokizFenrir

ответ

0

ReadAllLines не будет когда-либо формат даты, как описано выше, и я не в состоянии воспроизвести проблему.

Удалите лишние ToString() из

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

Как это строка уже и параметры здесь может форматировать строку неправильно.

О, и убедитесь, что вы просматриваете физический файл в текстовом редакторе, не превосходящем для сравнения, иначе он будет выглядеть по-другому.

Можете ли вы опубликовать некоторые примеры дат, которые работают некорректно?

+0

Спасибо. Я удалил .ToString() не понял, почему у меня это было. Действительный момент, но я использую notepad ++ для большинства из этих вещей, а не excel. Физический файл, как указано первоначально, является правильным «yyyy/mm/dd» .ReadAllLines() читает его как «yy/mm/dd». – LokizFenrir

0

Не так много ответа, но решение, тем не менее, для моей проблемы кажется.

  1. Замкнутые все приложения
  2. Ран CCleaner очистки
  3. Заново Visual Studio
  4. Заново рамки DotNet 4.5.2
  5. Registered Рамочную

и быть излишне осторожным переписал мой кода в новом обновленном проекте.

Волшебно все работает так, как должно.


~ я думаю, что теперь я знаю, как он должен чувствовать себя за врача ударяя ошибка с антибиотиками (вы не совсем уверен, что сделал трюк и не вызвало проблему, но она решена) ~

+0

@Pabregez. спасибо – LokizFenrir

+0

@ 734028 спасибо тоже – LokizFenrir