none
想要測試讀取資料(有分行),並寫到檔案,但讀取時卻沒有分行 RRS feed

  • 問題

  • 您好:

    程式碼如下

    我想要先讀取檔案,其中 該檔案 由別的匯出,有分行\r\n。

    但以下程式碼,讀取時,CONSOLE 看到的卻是沒有分行

    寫到檔案,也沒有分行,且 印出來 又亂碼?

    請問 這讀取的地方,有哪邊要修改的嗎?

    寫出的為UTF-8 檔案格式(似乎要用 具有BOM的UTF-8 或 ANSI 才能正常列印)

    謝謝!

    public string readFileX() {
    
    
                string filePath = this.pathX + fileNameX + "_READ.txt";
                string rtn = ""; //回傳
    
                try
                {
                    
                    // using 语句也能关闭 StreamReader
                    using (StreamReader sr = new StreamReader(filePath))
                    {
    
                        /*
                        string strLineData;
                        strLineData = sr.ReadLine();
                        while (!String.IsNullOrEmpty(strLineData))
                        {
                            strLineData = sr.ReadLine();
                            rtn += strLineData;
                        }
                        */
                        
                        
                        string line;
    
                        // 从文件读取并显示行,直到文件的末尾 
                        while ((line = sr.ReadLine()) != null)
                        {
                            //Console.WriteLine(line);
                            rtn += line;
                        }
                        
                    }
                }
                catch (Exception e)
                {
                    // 向用户显示出错消息
                    Console.WriteLine("The file could not be read:");
                    Console.WriteLine(e.Message);
                }
    
    
                Console.WriteLine(rtn);
                Console.ReadKey();
                
    
                return rtn;
    
    
        }//---readFileX

    public void writeFileX(string filePath,string readed) {
                try
                {
                    using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        StreamWriter sw = new StreamWriter(fs);
                        sw.BaseStream.Seek(0, SeekOrigin.End);
                        //sw.WriteLine("用 Environment.NewLine 实现文本文件换行;");
                        sw.WriteLine(readed);
                        sw.WriteLine(Environment.NewLine);//换行
                        //sw.WriteLine("被换行段落。");
                        sw.Flush();
                        sw.Close();
                        fs.Close();
                    }
                }
                catch
                {
                    //"保存文本文件出错!"
                }
    
    
            }//----writeFileX()

    2020年6月23日 上午 02:33

解答

  • ReadLine 本身會把換行吃掉,且使用 StreamReader 會有解碼問題

    我個人慣例是一律當成 binary file 讀,讀完再考慮轉碼,這樣的好處是甚麼檔都能收,文字檔再做 BOM 偵測與轉碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 softballnow 2020年6月28日 下午 12:21
    2020年6月25日 下午 12:26

所有回覆

  • 您好:

    這最後,我  sw.WriteLine("\uFEFF"+readed); 這樣字碼正常

    讀取時 

    // 从文件读取并显示行,直到文件的末尾 
                        while ((line = sr.ReadLine()) != null)
                        {
                            //Console.WriteLine(line);
                            rtn += line+ Environment.NewLine;
                        }

    要加 Environment.NewLine

    還是有較正常的方式呢?

    謝謝!

    2020年6月23日 上午 05:43
  • ReadLine 本身會把換行吃掉,且使用 StreamReader 會有解碼問題

    我個人慣例是一律當成 binary file 讀,讀完再考慮轉碼,這樣的好處是甚麼檔都能收,文字檔再做 BOM 偵測與轉碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 softballnow 2020年6月28日 下午 12:21
    2020年6月25日 下午 12:26
  • 您好:
    謝謝您!

    我在GOOGLE 看看您的用法

    謝謝!

    2020年6月28日 下午 12:21