在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是I/O?

汽車電子技術 ? 來源:程序猿知秋 ? 作者:程序猿知秋 ? 2023-01-20 17:16 ? 次閱讀

什么是I/O?

  • I/O 的全稱是input/output,即輸入和輸入設備,常見的輸入設備有:鍵盤、鼠標,輸出設備則比如 顯示器、音響 這樣的。
  • 對程序而言,IO就是與外面數據交換的方式, 數據向程序里面錄入就是 輸入,從程序往流出就是 輸出
  • IO在程序中的作用就是將數據轉換成 字節,然后進行交互

流(Stream)

C#中,所有流都是繼承自Stream類,Stream類定義了流應該具有的行為和屬性,使得開發人員可以忽略底層的操作系統和基礎設備的具體細節。C#對流的處理忽略了讀流和寫流的區別,使其更像是一個管道,方便數據通信

流涉及到三個基本操作:

  • 讀取 - 將數據從流中傳輸到數據結構中
  • 寫入 - 將數據從數據源寫入流中
  • 查找 - 對流中操作的當前位置進行查找和修改

因為流的特性,可能并不是所有的流都支持這三種操作,所以Stream提供了三個屬性,以方便確認流是否支持這三種操作:

  • public abstract bool CanRead { get; } // 獲取指示當前流是否支持讀取的值
  • public abstract bool CanWrite { get; } // 獲取指示當前流是否支持寫入功能的值
  • public abstract bool CanSeek { get; } // 獲取指示當前流是否支持查找功能的值

**以上這三個屬性均由子類根據自身特性確認是否支持讀取、寫入、查找,可能三個屬性不會都為true,但絕對不會都為false。
**

讀寫類

  • 字節流
    • BinaryReader和BinaryWriter
    • 字節流用來處理,人看不懂的內容,如圖片、視頻等文件用文本打開看不懂的內容
  • 字符流
    • TextReader和TextWriter
      • ****StreamReader和StreamWriter
      • StringReader和StringWriter
    • **用來處理人能看懂的內容,用文本打開能看懂的內容,如:自己寫的各種文本內容
      **

常見的IO類

System.IO 命名空間有各種不同的類,用于執行各種文件操作,如創建和刪除文件、讀取或寫入文件,關閉文件等

I/O 類 描述
BinaryReader 從二進制流讀取原始數據。
BinaryWriter 以二進制格式寫入原始數據。
BufferedStream 字節流的臨時存儲。
Directory 有助于操作目錄結構。
DirectoryInfo 用于對目錄執行操作。
DriveInfo 提供驅動器信息
File 有助于處理文件。
FileInfo 用于對文件執行操作。
FileStream 用于文件中任何位置的讀寫。
MemoryStream 用于隨機訪問存儲在內存中的數據流。
Path 對路徑信息執行操作。
StreamReader 用于從字節流中讀取字符。
StreamWriter 用于向一個流中寫入字符。
StringReader 用于讀取字符串緩沖區。
StringWriter 用于寫入字符串緩沖區。

FileStream 類

用FileStream來創建或讀取一個文件對象,語法如下:

FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

**如下,讀取aa.txt文件的內容
**

FileStream fileStream = new FileStream(@"D:\\c#workspace\\練習\\aa.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
參數 描述
FileMode FileMode 枚舉定義了各種打開文件的方法。FileMode 枚舉的成員有:Append:打開一個已有的文件,并將光標放置在文件的末尾。如果文件不存在,則創建文件。Create:創建一個新的文件。如果文件已存在,則刪除舊文件,然后創建新文件。CreateNew:指定操作系統應創建一個新的文件。如果文件已存在,則拋出異常。Open:打開一個已有的文件。如果文件不存在,則拋出異常。OpenOrCreate:指定操作系統應打開一個已有的文件。如果文件不存在,則用指定的名稱創建一個新的文件打開。Truncate:打開一個已有的文件,文件一旦打開,就將被截斷為零字節大小。然后我們可以向文件寫入全新的數據,但是保留文件的初始創建日期。如果文件不存在,則拋出異常。
FileAccess FileAccess 枚舉的成員有:Read、ReadWrite和Write。
FileShare FileShare枚舉的成員有:Inheritable:允許文件句柄可由子進程繼承。Win32 不直接支持此功能。None:謝絕共享當前文件。文件關閉前,打開該文件的任何請求(由此進程或另一進程發出的請求)都將失敗。Read:允許隨后打開文件讀取。如果未指定此標志,則文件關閉前,任何打開該文件以進行讀取的請求(由此進程或另一進程發出的請求)都將失敗。但是,即使指定了此標志,仍可能需要附加權限才能夠訪問該文件。ReadWrite:允許隨后打開文件讀取或寫入。如果未指定此標志,則文件關閉前,任何打開該文件以進行讀取或寫入的請求(由此進程或另一進程發出)都將失敗。但是,即使指定了此標志,仍可能需要附加權限才能夠訪問該文件。Write:允許隨后打開文件寫入。如果未指定此標志,則文件關閉前,任何打開該文件以進行寫入的請求(由此進程或另一進過程發出的請求)都將失敗。但是,即使指定了此標志,仍可能需要附加權限才能夠訪問該文件。Delete:允許隨后刪除文件。

使用示例

public static void Main()
{
    // 定義文件流
    FileStream fileStream = new FileStream(@"D:\\c#workspace\\練習\\aa.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
   
    for (int i = 1; i <= 20; i++)
    {
        fileStream.WriteByte((byte)i);
    }


    // 文件開頭開始讀取
    fileStream.Position = 0;
    for (int i = 0; i <= 20; i++)
    {
        Console.Write(fileStream.ReadByte() + " ");
    }
    //關閉流
    fileStream.Close();
    Console.ReadKey();
}

**輸出結果如下:
**

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

字符流 StreamReader 和 StreamWriter 類

用于文本文件的數據讀寫。這些類從抽象基類 Stream 繼承,Stream 支持文件流的字節讀寫

讀寫文件案例

static void test2()
{
    // 定義一個streamWriter寫一個文件
    string[] nameArray = { "張三", "李四", "王五" };
    // 使用using,用完后能自動關流
    using(StreamWriter sw=new StreamWriter(@"D:\\c#workspace\\練習\\aa.txt"))
    {
        foreach(string str in nameArray)
        {
            // 一次寫一行
            sw.WriteLine(str);
        }
    }




    // 讀取剛寫入的文件
    using(StreamReader sr=new StreamReader(@"D:\\c#workspace\\練習\\aa.txt"))
    {
        string line;
        // 當值為null,說明已經讀完了文件
        while ((line =sr.ReadLine())!= null)
        {
            Console.WriteLine(line);
        }
    }


}

輸出結果

張三
李四
王五

字節流 BinaryReader 和 BinaryWriter 類用于二進制文件的讀寫

復制圖片案例

static void test3()
{
    // 復制圖片


    byte[] imgArray = null;
    //先讀取原圖
    FileStream fs = new FileStream(@"D:\\c#workspace\\練習\\img\\1.jpg", FileMode.Open);
    using(BinaryReader br=new BinaryReader(fs))
    {
        imgArray = br.ReadBytes((int)fs.Length);
    }




    // 生成一個新的圖片
    FileStream fs2 = new FileStream(@"D:\\c#workspace\\練習\\img\\aaa.jpg", FileMode.Create);
    using (BinaryWriter bw = new BinaryWriter(fs2))
    {
        bw.Write(imgArray);
    }


}

Windows 文件系統的操作

C# 允許您使用各種目錄和文件相關的類來操作目錄和文件,比如 DirectoryInfo 類和 FileInfo 類。

  • DirectoryInfo 類派生自 FileSystemInfo 類。它提供了各種用于創建、移動、瀏覽目錄和子目錄的方法。該類不能被繼承
  • FileInfo 類派生自 FileSystemInfo 類。它提供了用于創建、復制、刪除、移動、打開文件的屬性和方法,且有助于 FileStream 對象的創建。該類不能被繼承

讀取指定目錄下的所有文件列表案例

static void test4()
{
    // 創建一個 DirectoryInfo 對象
    DirectoryInfo mydir = new DirectoryInfo(@"D:\\c#workspace\\練習");


    // 獲取目錄中的文件以及它們的名稱和大小
    FileInfo[] f = mydir.GetFiles();
    foreach (FileInfo file in f)
    {
        Console.WriteLine("File Name: {0} Size: {1}",
            file.Name, file.Length);
    }
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 輸入設備
    +關注

    關注

    0

    文章

    24

    瀏覽量

    8491
  • i/o
    i/o
    +關注

    關注

    0

    文章

    33

    瀏覽量

    4593
  • 輸出設備
    +關注

    關注

    0

    文章

    10

    瀏覽量

    2073
收藏 人收藏

    評論

    相關推薦

    I/O電路中電壓比較器與I/O信號完整性介紹

    在高速I/O電路設計中,輸入I/O的比較器是一個非常重要的模塊。
    的頭像 發表于 10-30 15:02 ?1773次閱讀
    <b class='flag-5'>I</b>/<b class='flag-5'>O</b>電路中電壓比較器與<b class='flag-5'>I</b>/<b class='flag-5'>O</b>信號完整性介紹

    物理約束實踐:I/O約束

    I/O約束(I/O Constraints)包括I/O標準(
    的頭像 發表于 11-18 16:42 ?1119次閱讀
    物理約束實踐:<b class='flag-5'>I</b>/<b class='flag-5'>O</b>約束

    數字I/O介紹

    數字I/O腳有專用和復用。數字I/O腳的功能通過9個16位控制寄存器來控制。控制寄存器分為兩類:(1)I/
    發表于 09-16 12:20 ?19次下載

    冗余I/O

    6.1 冗余I/O的定義當I/O模塊以每兩個一組組態成冗余對運行時,I/O模板即認為是冗余配置。
    發表于 07-23 00:29 ?26次下載

    基于Rocket I/O模塊的高速I/O設計

    摘要: 介紹了采用Videx-ⅡPR0系列FPCA設計的應用于下一代無線通信系統中的高速IO。由于充分利用芯片中集成的Rocket IO模塊,并采用差分輸入參考時鐘、
    發表于 06-20 10:45 ?1344次閱讀
    基于Rocket <b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊的高速<b class='flag-5'>I</b>/<b class='flag-5'>O</b>設計

    什么是I/O地址

    什么是I/O地址 I/O地址中I是input的簡寫,O是output的簡寫,也就是輸入輸出地址
    發表于 02-05 10:01 ?1347次閱讀

    I/O擴展(8255)模塊

    為用戶在中提供一個I/O 擴展的方法,在設計過程遇到I/O不夠用時可以用此種方案。
    發表于 07-04 17:12 ?0次下載

    Java I/O 的相關方法分析

    I/O,即 Input/Output(輸入/輸出) 的簡稱。就 I/O 而言,概念上有 5 種模型:blocking I/
    發表于 09-27 13:18 ?0次下載
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相關方法分析

    介紹 I/O NI系統,C系列的I/O模塊

    內容包括:理想的確定性以太網I/O,具有確定性分布式I/O的NI系統,C系列的I/O模塊,與La
    的頭像 發表于 06-14 06:19 ?4585次閱讀
    介紹 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> NI系統,C系列的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊

    PLC的I/O模塊如何選擇

    一般IO模塊的價格占PLC價格的一半以上。PLC的IO模塊有開關量IO模塊、模擬量
    發表于 05-19 08:54 ?9521次閱讀
    PLC的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊如何選擇

    關于標準I/O庫執行I/O操作

    當在輸入和輸出中遇到換行符時,標準I/O庫執行I/O操作。這允許我們一次輸出一個字符,但只有在寫了一行之后才進行實際I/
    的頭像 發表于 07-01 17:17 ?2396次閱讀

    STM32單片機---I/O應用

    STM32單片機---(二)I/O應用stm32I/O簡介GPIO的8種工作模式stm32I/O
    發表于 12-17 18:33 ?18次下載
    STM32單片機---<b class='flag-5'>I</b>/<b class='flag-5'>O</b>應用

    Linux I/O 接口的類型及處理流程

    Linux I/O 接口 Linux I/O 接口可以分為以下幾種類型: 文件 I/O 接口:用
    的頭像 發表于 11-08 16:43 ?956次閱讀
    Linux <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 接口的類型及處理流程

    FANUC外部I/O點數不夠用了怎么辦?可以擴展I/O點數嗎?

    FANUC外部I/O點數不夠用了怎么辦?可以擴展I/O點數嗎? 擴展FANUC的外部I/O點數是
    的頭像 發表于 02-18 15:21 ?1915次閱讀

    直接I/O

    電子發燒友網站提供《直接I/O庫.pdf》資料免費下載
    發表于 10-14 10:55 ?0次下載
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b>庫
    主站蜘蛛池模板: 五月天婷婷网址| 久久国产视频网站| tom影院亚洲国产| 免费性网站| 女人张开腿让男人桶免费网站 | 欧美香蕉视频| 夜夜夜夜夜操| 操女人免费视频| 色婷婷狠狠久久综合五月| 国产精品9999久久久久仙踪林 | 天天噜噜噜| 大色视频| 欧美涩区| 色01视频| 天天摸天天看天天做天天爽| 91大神免费视频| 欧美有码视频| 日韩在线影院| 1v1双性受整夜不拔bl| 男人操女人在线观看| 五月综合久久| 在线午夜影院| 亚洲欧美成人网| 免费观看的黄色网址| 久操免费在线| 午夜片网站| 又黄又爽又猛午夜性色播在线播放| 国内精品久久久久影院男同志| 日本特级视频| 久久夜靖品| 午夜老司机福利| 亚洲精品久久片久久| 午夜激情婷婷| 好男人社区www在线观看| 1024亚洲视频| 日本国产高清色www视频在线| 天堂中文网| 亚洲国产精品乱码一区二区三区 | 5252欧美在线观看| 日本欧美色图| 精品一区二区三区18|