1

a と r+ を使用してファイルを開きましたが、fseek と ftell を使用すると、ファイル ポインターは常に 0 になります。私のファイルは次のようになります。

 1 -3     
 2 -8    

そして、2つの間に別の行を追加したいのですが、最後の行の後に最後に追加されています。別のフォーラムの誰かが、ファイルを追加で開くと、ポインタは常にゼロであり、r+ で開く必要があり、それが機能しない場合は「完全なデータを読み取ってから、データを変数に挿入し、書き直して。」しかし、それが何を意味するのかわかりません。

ファイルの途中に数字を挿入するのを手伝ってくれる人はいますか?

ありがとう!

このようなものは機能しますか?データを転送するには?

    rewind(fp);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
    fseek(fp,1,0);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
4

3 に答える 3

2

他の人が言ったように、ファイルの途中にデータを挿入する簡単な方法はありません。本当にこれを行いたい場合は、次の手順を実装できます。

  1. 2 番目のファイルを作成する
  2. 挿入したい場所より前のすべてのデータを2番目のファイルにコピーします
  3. 2番目のファイルに必要な行を挿入します
  4. 残りのデータを 2 番目のファイルにコピーします
  5. 元のファイルを削除する
  6. 2 番目のファイルの名前を変更する

他のアプローチは、テキスト ファイルの代わりにバイナリ ファイルを使用することです。バイナリ ファイルは少し習得が難しいですが、バイナリ ファイルがどのように機能するかを理解すれば、バイナリ ファイルの操作は配列の操作によく似ていることがわかります。たとえば、このタスクを実行するために、補助ファイルを使用する必要さえありません。

于 2011-05-22T16:43:45.273 に答える
1

openランダムなポイントでファイルにデータを「挿入」できるモードはありません。既存のデータを上書きせずにデータを追加できる唯一の場所は、ファイルの最後 (モード "a" で開くファイル) です。

ランダムな位置に挿入したい場合は、自分で行う必要があります。

簡単な方法の 1 つは、ファイルを完全に書き直すことです (古いファイルの先頭を新しいファイルに転送し、データを新しいファイルに追加し、古いファイルの残りを転送し、最後に名前を変更/上書きします)。 .

難しい方法: すべてのデータを挿入ポイントからファイルの終わりまで手動で「シフト」する必要があります。それを正しく理解するのは簡単ではありません。

于 2011-05-22T16:18:25.967 に答える
0

ファイルの途中にデータを挿入する簡単な方法はありません。ファイルは基本的に文字の配列です。途中に文字を追加するには、挿入ポイント以降のすべてを 1 つ下にコピーする必要があります。ファイルを使用すると、後続のデータを読み取り、追加後に書き込む必要があります。

通常、このようなことをしたいときは、新しいファイルを作成します。挿入したいポイントまで古いファイルをコピーし、挿入したいデータを書き込んでから、古いファイルの残りをコピーします。最後に、新しいファイルの名前を古いファイルに変更します。

于 2011-05-22T16:19:05.917 に答える