读取txt文件,文件中字符“\n”在XP系统中显示小黑点,但是在WIN7中是看不到这个小黑点的,在用StreamReader类的ReadLine方法行读取的时候读到小黑点“\n”字符的时候也自动换行了,这就导致行读取出错,正常的行读取应该是读到字符“\r\n”的时候才换行,请问有什么方法可以避免读到小黑点“\n”字符的时候换行读取?从而正确的行读取文本信息?
请高手多多赐教哦!!!

解决方案 »

  1.   

    不要用ReadLine方法。你可以考虑使用Read()方法,一次读取一个字符。然后自己判断什么时候换行。
      

  2.   

    我看了下,Read()没有你说的用法。
      

  3.   

    using (StreamReader reader = new StreamReader(path))
                {
                    String str = reader.ReadToEnd();
                    String[] result = str.Split(new String[] { "\r\n" }, StringSplitOptions.None);
                    foreach (string s in result)
                    {
                        Console.WriteLine(s);
                    }
                }
      

  4.   

     private void Button2_Click(object sender, System.EventArgs e)    
       {    
        ExistsFile(Server.MapPath("test/weather.txt"));//检查文件是否存在    
        //读取文件    
        StreamReader sr = new StreamReader(Server.MapPath("test/weather.txt"), System.Text.Encoding.Default);    
        try  
        {   
         string input = sr.ReadToEnd();    
         sr.Close(); //有的平台只有\n表示换行 如 mac,linux之流,windows平台换行使用\r\n    
    //所以就连.net框架都有一个  System.Environment.NewLine; 以实现不同平台的换行.</DIV>   
         input = input.Replace("\r\n", "").Replace("\n", ""); //注:\r\n在winform中是换行,在html的文档内换行,显示出来的页面是不会换行的.   
         this.TextBox1.Text = input;    
        }   
        catch  
        {   
         Response.Write("<script>alert('文件读取失败');</script>");   
        }   
       }    
      

  5.   

    1、最好不要区别\r\n和\n,很多编辑器认为他们是一样的,甚至会在保存的时候把其中一种换成另外一种。
    2、如果一定要区分,可以继承StreamReader并重写ReadLine函数(不是太容易)。
    3、另一个效率比较低的方法为:
    string[] lines = File.ReadAllText("my.txt").Split(new string[] { "\r\n" }, StringSplitOptions.None);
      

  6.   

    using System;
    using System.IO;class Test 
    {

        public static void Main() 
        {
            string path = @"d:\MyTest.txt";        
            if (File.Exists(path)) 
            {
                File.Delete(path);
            }        using (StreamWriter sw = new StreamWriter(path)) 
            {
                sw.WriteLine("This");
                sw.WriteLine("is some text");
                sw.WriteLine("to test");
                sw.WriteLine("Reading");
            }        using (StreamReader sr = new StreamReader(path)) 
            {
                char[] cArray = new char[128];
    int index = 0;            while (sr.EndOfStream == false) 
                {
                    sr.Read(cArray, index, 1);
                 
    if (cArray[index] == '\n')
    {
    Console.WriteLine("\t--n换行");
    }
    else if (cArray[index] == '\r')
    {
    Console.WriteLine("\t--r回车");
    }
    else
    {
    Console.Write(cArray[index]);
    }

    index++;
                }
            }

    Console.ReadKey();
           
        }
    }
      

  7.   

    事实上,\n就是换行符,而\r是回车(返回符),因此ReadLine方法读取到\n就判断为一行是完全正确的,换行不一定需要返回行首。
      

  8.   

    如果是将所有的\n替换成\r\n再读取的话会导致导致数据出错,比如一行数据读出两行了。
      

  9.   

    已经解决,我自己的解决办法是用ReadToEnd()方法把文件全部读取,再把小黑点"\n"替换为空去除小黑点,然后把读取的内容按"\r\n"字符分割。
    上面的回复也有很好的解决办法,多谢各位的指教!