• c# FileStream和StreamWriter用法


                 FielStream類操作的是字節和節節數組,而stream類操作的是字符數據。字符數據易於使用,但是有些操作,比如隨機文件訪問(訪問文件中間某點的數據),就必須由FileStream對象執行。
                 FielStream類維護內部文件指針,該指針指向文件中進行下一次讀寫操作的位置。
                 FileStream只能處理原始字節(raw byte),處理原去吧字節的功能使用FileStream類可以用於處理任何數據文件。
                 通過讀取字節數據,FileStream對像可以用於讀取圖像和聲音。代價是FileStream類不能將數據直接讀入字符串
                 此指針可以修改用Seek方法,它有兩個參數:
                 第一個參數:規定文件指針以字節為參數的移動距離
                 第二個參數:規定開始計算的起始位置

            byte[] byDataValue = new byte[200];
            
    char[] charDataValue = new char[200];

            
    /// <summary>
            
    /// FilesStream讀取用法
            
    /// </summary>
            private void FilesStreamReadFile()
            {
                
    try
                {
                    FileStream fsFile 
    = new FileStream(@"d:\log.cs", FileMode.Open);
                    
    //文件指針移到文件的135個字節
                    fsFile.Seek(135, SeekOrigin.Begin);
                    
    //將接下來的字節讀到Array中
                    fsFile.Read(byDataValue, 0200);
                }
                
    catch (Exception e)
                {
                    
    throw e;
                }
                
    //將字節轉換成字符
                Decoder dc = Encoding.UTF8.GetDecoder();
                
    //字節數組轉換成字符數組,便於顯示
                dc.GetChars(byDataValue, 0, byDataValue.Length, charDataValue, 0);

            }

            /// <summary>
            
    /// FilesStream寫入用法
            
    /// </summary>
            private void FileStreamWriteFile()
            {
                FileStream fsFile 
    = new FileStream(@"D:\log.txt", FileMode.Create);
                charDataValue
    ="This is test string".ToCharArray();
                byDataValue
    =new byte[charDataValue.Length];

                
    //將字符數組轉換成字節數組
                Encoder ec=Encoding.UTF8.GetEncoder();
                ec.GetBytes(charDataValue,
    0,charDataValue.Length,byDataValue,0,true);

                
    //將指針設定起始位置
                fsFile.Seek(0,SeekOrigin.Begin);
                
    //寫入文件
                fsFile.Write(byDataValue,0,byDataValue.Length);
            }

        FileStream對象通常會在StreamWriter或StreamReader內使用,並使用它們的方法處理文件。
            /// <summary>
            
    /// StreamWriter寫入方法
            
    /// </summary>
            private void StreamWriterMetod()
            {
                
    try
                {
                    FileStream fsFile 
    = new FileStream(@"d:\log.txt",FileMode.OpenOrCreate);
                    StreamWriter swWriter 
    = new StreamWriter(fsFile);
                    
    //寫入數據
                    swWriter.WriteLine("Hello Wrold.");
                    swWriter.WriteLine(
    "It is now {0}", DateTime.Now.ToLongDateString());    
                    swWriter.Close();
                }
                
    catch (Exception e)
                {

                    
    throw e;
                }
            }


            /// <summary>
            
    /// StreamWriter讀取方法
            
    /// </summary>
            private void StreamReaderMetod()
            {
                
    string sLine = "";
                
    try
                {
                    FileStream fsFile 
    = new FileStream(@"d:\log.txt", FileMode.Open);
                    StreamReader srReader 
    = new StreamReader(fsFile);
                    
    //讀取文件(讀取大文件時,最好不要用此方法)
                    sLine = srReader.ReadToEnd();
                    txbValue.Text 
    = sLine;
                    srReader.Close();
                }
                
    catch (Exception e)
                {
                    
    throw e;
                } 
            }

            /// <summary>
            
    /// StreamWriter讀取方法2
            
    /// </summary>
            private void StreamReaderMetodTwo()
            {
                
    try
                {
                    FileStream fsFile 
    = new FileStream(@"d:\log.txt", FileMode.Open);

                    
    /*
                     * 讀取數據最簡單的方法是Read()。此方法將流的下一個字符作為正整數值返回,
                     * 如果達到了流的結尾處,則返回-1。
                     
    */
                    StreamReader srReader 
    = new StreamReader(fsFile);
                    
    int iChar;
                    iChar 
    = srReader.Read();
                    
    while (iChar != -1)
                    {
                        txbValue.Text 
    += (Convert.ToChar(iChar));
                        iChar 
    = srReader.Read();
                    }
                    srReader.Close();
                }
                
    catch (Exception e)
                {
                    
    throw e;
                }
            }

    注:FileMode枚舉成員值在文件存在與不存在時的情況

    成員

    文件存在時

    文件不存在時

    Append

    打開文件,流指向文件的末尾,只能與枚舉FileAcess.Write聯合使用

    創建一個新文件。只能與枚舉FileAcess.Write聯合使用

    Create

    刪除該文件,然後創建新文件

    創建新文件

    CreateNew

    拋出異常

    創建新文件

    Open

    打開現有文件,流指向文件開頭

    拋出異常

    OpenOrCreate

    打開文件,流指向文件開頭

    創建新文件

    Truhncate

    打開現有文件,清除其內容。流指向文件開頭,保留文件的初始創建日期。

    拋出異常



  • 相关阅读:
    Xamarin.Forms之ToolbarItem
    Xamarin.Forms一些常见问题
    Xamarin.Forms之页面及导航
    Xamarin.Forms 自定义控件(呈现器和效果)
    Xamarin.Forms之主题
    Xamarin.Forms之样式
    Android开发
    eShopOnContainers项目
    使用Xamarin.Forms构建企业应用
    Xamarin.Forms之XAML
  • 原文地址:https://www.cnblogs.com/scottckt/p/1233523.html
Copyright © 2020-2023  润新知