fwrite&freadの使用

8143 ワード

ファイル操作モードを切り替えるたびにfcloseを呼び出してファイルを閉じる必要があります.
 
操作モードを直接切り替えると、ファイルが破損(文字化けし)したり、操作に失敗したりします.
 
fcloseが呼び出されると、パラメータであるファイルポインタが回収され、再定義が必要になるため、機能をカプセル化することが望ましい.
 
配列を格納する場合、fwriteパラメータsize_t sizeはsizeof(buffer[0])、size_を使用できます.t countはsizeof(buffer)/sizeof(buffer[0])を使用することができる.
 
freadは、正常に読み込まれたデータの数、最大値がパラメータsize_である整数を返します.t count.
 
ループシーケンス読み取りを使用する場合while(!feof(stream))は、freadが1回の読み取りが不完全になった後にファイルの最後の条件をトリガーします.

例:

#include
#include

int main()
{
    using std::cin;
    using std::cout;
    using std::endl;
    cout << "Hello, I am a C++ test program." << endl; 
    cin.get();
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    FILE* _f0;
    _f0 = fopen("f0.txt", "wb");
    if (_f0 != NULL) 
    {
        cout << "I created a file named \"f0\"." << endl;
        cin.get();
        int buf[8];
        cout << "size of buf[0] = " << sizeof(buf[0]) << endl
            << "size of buf = " << sizeof(buf) << endl;

        for (int i = 0; i < 8; i++)
        {
            buf[i] = '0' + i;
        }
        fwrite(buf, sizeof(buf[0]), sizeof(buf)/sizeof(buf[0]), _f0);
        cout << "Then put some numbers into this file." << endl;
        cin.get();
        cout << "Read out these numbers:" << endl;
        fclose(_f0);
        FILE* _f1 = fopen("f0.txt", "rb");
        cout << "f0 = " << _f1 << endl;
        int i = 0;
        int R = 0;
        int n = 0;
        while (!feof(_f1))
        {
            n = fread(&R, sizeof(R), 1, _f1);
            cout << "n = " << n << " buf[" << i << "] = " << R << endl;
            i++;
        }
        fclose(_f1);
        cout << "At last, add a number to the file." << endl;
        FILE* _f2 = fopen("f0.txt", "ab");
        R = '8';
        fwrite(&R, sizeof(R), 1, _f2);
        fclose(_f2);
    }
    else 
    {
        cout << "File creating failed." << endl;
    }
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    cout << endl << "Press enter to end.";
    cin.get();
    return 0;
}