私はC言語を使ってデータベースフラットファイルプロジェクトを作成しています。私はメンバーが少ない構造を作りました。私はfwrite()を使ってバイナリファイルとfread()を使ってデータを取得しています。私の2つの主要な質問fread()とfwriteがCプログラミングでどのように動作するか
私たちはテキストファイルで構造を書くことができますか?私は良い例を見ていない。テキスト形式で書くのは事実上間違っていますか?私が "wb"の代わりに "w"を使用して書くとき、私はテキスト形式を取得しますが、いくつかの余分な単語があります。
2番目これらのfread()& fwriteがどのように動作しますか()。それらは、次のブロックのアドレスをどのように取得するかというデータブロック上で動作します。私はポインタを持っていますが、ファイルにはどのアドレスもないので、ポインタが次のブロックにどのように移動するのでしょうか?
いいえ、ファイルがバイナリモードで開いていない場合は、バイナリ構造を読み書きできません。明らかに、ファイルシステムの仕組みや、OS APIがどのようにファイルシステムにアクセスするかについていくつかの研究を行う必要があります。これは実際のファイルアクセスのためにOSに委譲する 'fread()'/'fwrite()'実装の範囲外です。 –
入力のために大丈夫ありがとう:)私はfgets/fputsを使うべきですか?テキスト形式で書く場合 – ekaf
データにランダムにアクセスする場合は、 'fread/fwrite'を実装します(ただし、構造体にポインタが含まれている場合は失敗します)。 'fprintf/fgets'と' sscanf'を使って、データセット全体を読み込み、処理して、ファイルを書き直したい場合、テキストは良いです。バイナリレコードとして保存されたデータは、移植性がないことが多く、プログラムが破損した場合、ファイルされたデータは無駄です。テキストファイルは人間が読める形式なので、データを別のプログラムに読み込むための新しい関数を書く方がはるかに簡単です。クライアントがデータファイルをスプレッドシートと互換性がなければならないと主張していたプロジェクト、CSV形式で作業しました。 –