StreamReader在西班牙语Windows 8上失败

时间:2015-04-16 21:28:08

标签: c# .net csv

我使用下面的代码导入CSV文件,使用VB阅读器但遇到了同样的问题。基本上在我的系统和其他我已测试它的工作,但在Windows 8 ESP(西班牙语)它失败。我能够通过在Visual Studio中打开导入的文件并使用编码(US-ASCII - 代码页20127)和行结尾CR / LF保存它来解决此问题。我的猜测是CR / LF设置,但我不确定。我没有西班牙语Windows测试这么尴尬,以确定确切的解决方案。我无法手动更改输入文件。

编辑:我知道在西班牙语row.length总是返回< = 5所以没有导入数据。我不知道它是否正在将整个文件作为一行读取(CR不起作用)或者它没有将行分开“;”不工作。

知道为什么西班牙语Windows没有正确读取文件或者如何解决它?

var frm = new OpenFileDialog();
var culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
var styles = System.Globalization.DateTimeStyles.None;
var delimiters = new char[] { ';' };
var trims = new char[] { '"' };
if (frm.ShowDialog() ?? false)
{
using (System.IO.StreamReader reader = System.IO.File.OpenText(frm.FileName))
{
    string input;
    while((input = reader.ReadLine()) != null)
    {
        var rows = input.Split(delimiters);
        for(int i = 0; i < rows.Length; i++)
        {
            rows[i] = rows[i].TrimStart(trims).TrimEnd(trims);
        }
        DateTime expiration;
        if (rows.Length > 5 && DateTime.TryParse(rows[4], culture, styles, out expiration))
        {
            new Pin()
                {
                    ID = Guid.NewGuid(),
                    PinCode = rows[0],
                    Name = rows[1],
                    Area = rows[5],
                    DeviceId = "",
                    Expiration = expiration,
                    IsSold = false
                });
        }
    }
}
}

示例数据:

"Code";"Profile name";"Profile type";"Duration";"Expiration date";"WiFi Area";
"99999";"10 peso 1 hour";"One-Time";"60  Mins";"2015-06-19 23:59:59";"company"

1 个答案:

答案 0 :(得分:1)

这就像眼睛疼痛一样突出:

var culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");

你为什么这样做?为什么不运行代码运行的当前系统的CultureInfo?