2014-10-17 52 views
1

我试图用Visual Studio C#编辑文件中的一些数据。我试过使用两种方法C#中文件的最大数据量?

StreamReader and File.ReadAllLines/ReadAllText 

这两个结果都给了我3414行内容。我在“ReadAllText”之后使用Split('\ n')。但是,当我检查使用以下命令在Linux上,我得到了如下的结果:

cat phase1_promoter_data_PtoP1.txt | wc 

输出:

184829 164686174 1101177922 

所以约185.000线和165个多万字。 Visual Studio的字数为我提供了大约1900万。

所以我的问题是,我读的文件是否错误或者Visual Studio是否对它将一次读取的数据量有限制?我的文件需要大约1 GB的空间。

这是我使用的代码:

try 
{ 
    using (StreamReader sr = new StreamReader("phase1_promoter_data_PtoP1.txt")) 
    { 
     String line = sr.ReadToEnd(); 
     Console.WriteLine(line); 
     String[,] data = new String[184829, 891]; 
     //List<String> data2 = new List<String>(); 

     string[] lol = line.Split('\n'); 

     for (int i = 0; i < lol.Length; i++) 
     { 
      String[] oneLine = lol[i].Split('\t'); 
      //List<String> singleLine = new List<String>(lol[i].Split('\t')); 


      for (int j = 0; j < oneLine.Length; j++) 
      { 
       //Console.WriteLine(i + " - " + lol.Length + " - " + j + " - " + oneLine.Length); 
       data[i,j] = oneLine[j]; 
      } 
     } 
     Console.WriteLine(data[3413,0]); 
    } 
} 
catch (Exception e) 
{     
    Console.WriteLine(e.Message); 
} 
+0

如果该文件包含多于3414行,则该代码会在遇到第3415行时立即抛出一个超出范围的异常。我也不确定你的'String line'能在你的'string [] lol'旁边包含1GB的文本,它将包含相同的内容,但是分隔在换行符上。你确定你正在查看与“猫”相同的文件吗? – CodeCaster 2014-10-17 10:12:43

+0

我的不好,我改变了我的数组的大小,因为我相信我的输出是错误的。但我不例外,因为实际上有3414行加载到数组中。 – Vanquiza 2014-10-17 10:16:02

+0

也许某些行有\ r,有些有\ r \ n或\ n分隔符,并且wc将它们与ReadAllLines()区别对待? – 2014-10-17 10:18:40

回答

2

在您的Dropbox文件包含6043线。

两个

Debug.Print(File.ReadAllLines(fPath).Count().ToString()); 

而且

Debug.Print(File.ReadAllText(fPath).Split('\n').Count().ToString()); 

显示了同样的结果(使用VS 2013的.NET 4.5)

我能够通过与各行..循环

using (var sr = new StreamReader(fPath)) 
{ 
    while (!sr.EndOfStream) 
    { 
     Debug.Print(sr.ReadLine()); 
    } 
} 

And

foreach(string line in File.ReadAllLines(fPath)) 
{ 
    Debug.Print(line); 
} 

而不是整个文件读入string一次,尝试上述环中的一个,并建立一个数组,你循环。