web-dev-qa-db-ja.com

fopen()のr +とw +の違い

fopen("myfile", "r+")では、"r+""w+"オープンモードの違いは何ですか?私はこれを読みました:

"r"テキストファイルを読み取り用に開きます。
"w"書き込み用にテキストファイルを開き、既存のファイルを長さゼロに切り捨てるか、ファイルが存在しない場合は作成します。

"r+"更新(つまり、読み取りと書き込みの両方)のためにテキストファイルを開きます。
"w+"更新(読み取りおよび書き込み)のためにテキストファイルを開きます。まず、ファイルが存在する場合はファイルの長さをゼロに切り捨て、存在しない場合はファイルを作成します。

違いは、"w+"でファイルを開くと、ファイルが最初に消去されるということです。

44
yaylitzis

主な違いは、w+が存在する場合はファイルをゼロ長に切り捨て、存在しない場合は新しいファイルを作成することです。 r+は、コンテンツを削除せず、存在しない場合は新しいファイルを作成しません。

これらのコードを試してみれば、理解できます。

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}  

そしてこれ

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fclose(fp);
}   

次に、ファイルtest.txtを開き、何が起こるかを確認します。最初のプログラムによって書き込まれたすべてのデータが消去されていることがわかります。
r+に対してこれを繰り返し、結果を確認します。あなたが理解することを願っています。

26
haccks

r+w+は両方とも、ファイルの読み取りと書き込みができます。ただし、r+はファイルの内容を削除せず、そのようなファイルが存在しない場合は新しいファイルを作成しませんが、w+はファイルの内容を削除し、存在する場合は作成します存在しない。

70
Peter
r = read mode only
r+ = read/write mode
w = write mode only
w+ = read/write mode, if the file already exists override it (empty it)

はい、ファイルが既に存在する場合、w +はファイルを消去し、空のファイルを提供します。

17
invalid_id

r+とは異なり、w+は2つの違いがあります。

  • ファイルがまだ存在しない場合は作成します
  • 最初にそれを切り捨てます、つまり、その内容を削除します
3
perreal

r +既存のファイルは、読み取りと書き込みの両方のために最初に開かれます。 w +読み取りと書き込みの両方を除き、wと同じです。

0
Ashwani Bansal