1

ファイルを閉じてから再度開くと、再度開いた後にそれ以上データを書き込むことはできませんが、開いたままにしておくと、必要な数の行を書き込んで、書き終わったら閉じることができます。以下の例を参照してください。ありがとう。

if (f_mount(&FatFs, "", 1) == FR_OK) {
      f_mkdir ("TEST");

      count = 0;
      while(count < 200){

          if(f_open(&fil, "TEST/test.txt", FA_OPEN_ALWAYS | FA_WRITE) != FR_OK){
              break;
          }
          else{
              sprintf(array,"This is file entry number: %d\r\n",count);
              f_puts(array, &fil);
              if(f_close(&fil) != FR_OK){
                  break;
              }
          }
          count++;
      }
      f_mount(0, "", 1);
}

最大値までカウントされますが、最後のエントリである 199 のみが書き込まれます。

4

1 に答える 1

0

最初に書き込むのではなく、ファイルに追加するようにオープンモードを設定する必要があります。

からf_open

FA_OPEN_APPENDFA_OPEN_ALWAYS読み取り/書き込みポインターがファイルの最後に設定されることを除いて、同じです。

これでファイルを開くと:

f_open(&fil, "TEST/test.txt", FA_OPEN_ALWAYS | FA_WRITE);

ファイルの先頭に書き込みポインターを使用して書き込み用にファイルを開いているため、ファイルに書き込むときは次のようにします。

f_puts(array, &fil);

ファイル内の以前のデータを上書きします。

オープンを次のように変更した場合:

f_open(&fil, "TEST/test.txt", FA_OPEN_APPEND | FA_WRITE);

次に、希望する動作を取得する必要があります。ただし、例外があります。これを実行するたびに、ファイルへの追加が続行されます。それが望ましくない場合は、最初にファイルを削除するか、最初に で開いてから でFA_OPEN_ALWAYS各パスを再度開く必要がありますFA_OPEN_APPEND


実行しようとしていることに応じて、 を確認する必要がありますf_sync。これは、 が実行するすべてのクリーンアップと書き込みをf_close実行しますが、ファイルを開いたままにします。ドキュメントから:

これは、データロガーなど、書き込みモードで長時間ファイルを開くアプリケーションに適しています。f_write 関数の直後または定期的に f_sync 関数を実行すると、突然の停電や意図しないメディアの取り外しによるデータ損失のリスクを最小限に抑えることができます。

これは、データを追加するためにファイルを繰り返し開いたり閉じたりする理由について、私が考えることができるほぼすべてのケースをカバーするため、問題のより良い解決策になる可能性があります。

于 2016-09-20T18:14:06.633 に答える