「C言語/ファイル入出力」の版間の差分
削除された内容 追加された内容
s/機械語/バイナリーデーター/6 タグ: 2017年版ソースエディター |
→ファイルのオープン: cleanup タグ: 2017年版ソースエディター |
||
2 行
== ファイルのオープン ==
まず、ファイルを作成したり読
ヘッダー<code><stdio.h></code>をインクルードする。
:<syntaxhighlight lang="C">
#include <stdio.h>
int main() {
FILE *fp = fopen("開きたいファイル名.拡張子", "モード");
if (fp == 0) return 1;
// ここにファイルの操作内容(作成、読書きなど)を記述。
}
</syntaxhighlight>
: ファイルに読
: オープンされていない状態のファイルは、操作できない。
: fopenがファイル操作のためにオープンする関数で、FILE型へのポインタを返すので、変数 <var>fp</var> に保持する。
: FILE型へのポインタの型は、
:<syntaxhighlight lang="C">
FILE *
</syntaxhighlight>
: である。
=== Visual Cで標準入出力関数などを使用する場合 ===
Visual Cでは、標準設定ではfopen関数などの標準入出力関数の使用が禁止されており、そのまま上記のコードをコンパイルすると、
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラーC4996’fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
のような警告を表示し、コンパイルが完了しない。
このような禁止されている関数の使用を許可するために、<code>#pragma warning(disable:4996)</code>を加え、コンパイラの警告を無効化する(メッセージ通り fopen を fopen_s で置換えても良いが、fopen_s を用意している処理系は稀で、GCCもclangもサポートしておらず、環境を選ばずコンパイルするためには #ifdef _MSC_VER などでプリプロセッサーで条件コンパイルする方法があるが、コードの見通しが悪くなる上バッファサイズの計算のケアなどを見落としがちなので、警告を無効化することを選択した)。
;Windowsでfopenを使う場合:<syntaxhighlight lang="C">
#include "stdafx.h"
#include <stdio.h>
53 ⟶ 41行目:
#pragma warning(disable:4996)
int main() {
FILE *fp = fopen("開きたいファイル名.拡張子", "モード");
if (fp == 0) return 1;
// ここにファイルの操作内容(作成、読書きなど)を記述。
fclose(fp);
}
</syntaxhighlight>
<code>#pragma warning(disable:4996)</code> が、fopenなどの関数の使用を許可
{{コラム|Visual Studio で、デバッグ セッションの終了時にコンソールが閉じてしまう場合|
Visual Studio で、コンソール アプリケーションのデバッグ セッションの終了時にコンソールが閉じてしまう場合は、
: [ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自動的にコンソールを閉じる]
を無効にします。
}}
#include "stdafx.h"
#include <stdio.h>
#pragma warning(disable : 4996)
int main() {
FILE *fp1 = fopen("test1.txt", "w");
if (fp1 == NULL) {
perror("ファイルを開けませんでした。\n");
return 1;
}
}</syntaxhighlight>
<code>fopen</code> は、モードを "w" で開いた場合、もし対象のファイルが存在しないときは、その名のファイルを新規作成する。
なお、fopenのモードは、
103 ⟶ 85行目:
がある。
なお、一般にファイル操作のプログラミングでは、ファイルのオープンに失敗した場合を想定して、そのような処理を書く必要がある。
fclose は、ファイルを閉じる関数である。クローズしている最中のファイルは、プログラミングによる読書きなどの操作をできない。
読者は、ソースファイルのあるフォルダを確認してみて、"test1.txt"というファイルが作られている事を確認しよう。
{{コラム|"stdafx.h"って何?|プログラムの冒頭で<syntaxhighlight lang="C" inline>#include "stdafx.h"</syntaxhighlight> と <code>"stdafx.h"</code> なるヘッダーをインクルードしています。
これはC言語標準にはなく、Windows(Visual Studio)固有のプリコンパイルヘッダーです。stdafx は Standard Application Frameworks の略で、MFC(Microsoft Foundation Class)の使用を想定しているものでした。
VS2019からが、<code>"stdafx.h"</code> から <code>"pch.h"</code>(Pre compile header)と機能と一致した名前になりました。
|