std::fclose

出自cppreference.com
< cpp | io | c
 
 
 
 
在標頭 <cstdio> 定義
int fclose( std::FILE* stream );

關閉給定的文件流,並將來自 stream 緩衝區的未寫入數據寫入關聯的輸出設備。捨棄任何尚未讀取的緩衝數據。

無論操作是否成功,流都不再關聯到文件,且由 std::setbufstd::setvbuf 分配的緩衝區(如果存在)也會被解除關聯,並且在使用自動分配時會被解分配。

如果有數據被寫入輸出設備,那麼從 std::fclose 返回會建立一個可觀察檢查點

(C++26 起)

如果在 std::fclose 返回後使用 stream 的值,那麼行為未定義。

參數

stream - 要關閉的文件流

返回值

成功時返回 0,否則返回 EOF

示例

#include <cstdio>
#include <cstdlib>

int main()
{
    int is_ok = EXIT_FAILURE;
    FILE* fp = std::fopen("/tmp/test.txt", "w+");
    if (!fp)
    {
        std::perror("打开文件失败");
        return is_ok;
    }

    int c; // 注意:是 int 而非 char,处理 EOF 所必须
    while ((c = std::fgetc(fp)) != EOF) // 标准 C I/O 文件读取循环
        std::putchar(c);

    if (std::ferror(fp))
        std::puts("读取时发生了 I/O 错误");
    else if (std::feof(fp))
    {
        std::puts("成功抵达文件末尾");
        is_ok = EXIT_SUCCESS;
    }

    std::fclose(fp);
    return is_ok;
}

輸出:

成功抵达文件末尾

參閱

打開文件
(函數) [編輯]
以不同名稱打開既存流
(函數) [編輯]
沖洗放置區緩衝區並關閉關聯的文件
(std::basic_filebuf<CharT,Traits> 的公開成員函數) [編輯]
fclose 的 C 文檔