<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                #### 21. 文件讀寫 上一節我們講解了 C 語言處理的標準輸入和輸出設備。本章我們將介紹 C 程序員如何創建、打開、關閉文本文件或二進制文件。 一個文件,無論它是文本文件還是二進制文件,都是代表了一系列的字節。C 語言不僅提供了訪問頂層的函數,也提供了底層(OS)調用來處理存儲設備上的文件。本章將講解文件管理的重要調用。 **打開文件** 您可以使用 **fopen( )** 函數來創建一個新的文件或者打開一個已有的文件,這個調用會初始化類型 **FILE** 的一個對象,類型 **FILE** 包含了所有用來控制流的必要的信息。下面是這個函數調用的原型: ~~~ FILE *fopen( const char * filename, const char * mode ); ~~~ 在這里,**filename** 是字符串,用來命名文件,訪問模式 **mode** 的值可以是下列值中的一個: | 模式 | 描述 | | --- | --- | | r | 打開一個已有的文本文件,允許讀取文件。 | | w | 打開一個文本文件,允許寫入文件。如果文件不存在,則會創建一個新文件。在這里,您的程序會從文件的開頭寫入內容。如果文件存在,則該會被截斷為零長度,重新寫入。 | | a | 打開一個文本文件,以追加模式寫入文件。如果文件不存在,則會創建一個新文件。在這里,您的程序會在已有的文件內容中追加內容。 | | r+ | 打開一個文本文件,允許讀寫文件。 | | w+ | 打開一個文本文件,允許讀寫文件。如果文件已存在,則文件會被截斷為零長度,如果文件不存在,則會創建一個新文件。 | | a+ | 打開一個文本文件,允許讀寫文件。如果文件不存在,則會創建一個新文件。讀取會從文件的開頭開始,寫入則只能是追加模式。 | 如果處理的是二進制文件,則需要使用下面的訪問模式來取代上面的訪問模式: ~~~ "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b" ~~~ **關閉文件** 為了關閉文件,請使用 fclose( ) 函數。函數的原型如下: ~~~ int fclose( FILE *fp ); ~~~ 如果成功關閉文件,**fclose( )** 函數返回零,如果關閉文件時發生錯誤,函數返回 **EOF**。這個函數實際上,會清空緩沖區中的數據,關閉文件,并釋放用于該文件的所有內存。EOF 是一個定義在頭文件 **stdio.h** 中的常量。 C 標準庫提供了各種函數來按字符或者以固定長度字符串的形式讀寫文件。 **寫入文件** 下面是把字符串寫入到流中的最簡單的函數: ~~~ int fputc(int c,FILE *fp); ~~~ 函數 **fputc()** 把參數 c 的字符值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字符,如果發生錯誤,則會返回 **EOF**。您可以使用下面的函數來把一個以 null 結尾的字符串寫入到流中: ~~~ int fputs( const char *s, FILE *fp ); ~~~ 函數 **fputs()** 把字符串 **s** 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回一個非負值,如果發生錯誤,則會返回 **EOF**。您也可以使用 **int fprintf(FILE \*fp,const char \*format, ...)** 函數來寫把一個字符串寫入到文件中。嘗試下面的實例: ![](data:image/svg+xml;utf8,) ~~~ void main(){ //定義一個空指針文件 FILE *fp = NULL; //打開文件,打開一個文本文件,允許讀寫文件。 // 如果文件不存在,則會創建一個新文件。 // 讀取會從文件的開頭開始,寫入則只能是追加模式。 fp = fopen("/Users/devyk/Data/ClionProjects/NDK_Sample/README.md","a+"); fprintf(fp, " fprintf 我是添加進來的1\n"); fprintf(fp, "fprintf 我是添加進來的2\n"); fputs("fputs 我是添加進來的1\n", fp); fputs("fputs 我是添加進來的2\n", fp); fclose(fp); } ~~~ **讀取文件** 下面是從文件讀取單個字符的最簡單的函數: ~~~ int fgetc( FILE * fp ); ~~~ **fgetc()** 函數從 fp 所指向的輸入文件中讀取一個字符。返回值是讀取的字符,如果發生錯誤則返回 **EOF**。下面的函數允許您從流中讀取一個字符串: ~~~ char *fgets( char *buf, int n, FILE *fp ); ~~~ 函數 **fgets()** 從 fp 所指向的輸入流中讀取 n - 1 個字符。它會把讀取的字符串復制到緩沖區 **buf**,并在最后追加一個 **null** 字符來終止字符串。 如果這個函數在讀取最后一個字符之前就遇到一個換行符 '\\n' 或文件的末尾 EOF,則只會返回讀取到的字符,包括換行符。您也可以使用 **int fscanf(FILE \*fp, const char \*format, ...)** 函數來從文件中讀取字符串,但是在遇到第一個空格和換行符時,它會停止讀取。 例子: ![](https://user-gold-cdn.xitu.io/2019/12/17/16f13d16fdcc9bf9?imageslim) ~~~ void main(){ FILE *fp = NULL; //讀取文件 char buff[255]; fp = fopen("/Users/devyk/Data/ClionProjects/NDK_Sample/README.md","r"); fscanf(fp,"%s",buff); printf("1: %s\n", buff); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看