1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8">
5 <meta http-equiv=
"Content-Style-Type" content=
"text/css">
6 <link rel=
"up" title=
"FatFs" href=
"../00index_j.html">
7 <link rel=
"alternate" hreflang=
"en" title=
"English" href=
"../en/open.html">
8 <link rel=
"stylesheet" href=
"../css_j.css" type=
"text/css" media=
"screen" title=
"ELM Default">
9 <title>FatFs - f_open
</title>
14 <div class=
"para func">
16 <p>ファイルをオープンまたは作成します。
</p>
19 FIL*
<span class=
"arg">fp
</span>,
<span class=
"c">/* [OUT] 空のファイル オブジェクト構造体へのポインタ */
</span>
20 const TCHAR*
<span class=
"arg">path
</span>,
<span class=
"c">/* [IN] ファイル名へのポインタ */
</span>
21 BYTE
<span class=
"arg">mode
</span> <span class=
"c">/* [IN] モードフラグ */
</span>
26 <div class=
"para arg">
30 <dd>新しく作成するファイル オブジェクト構造体へのポインタを指定します。以降、そのファイルを閉じるまでこのファイル オブジェクトを使用してファイル操作をします。
</dd>
32 <dd>開くファイルの
<a href=
"filename.html">ファイル名
</a>を示すヌル文字
<tt>'\
0'
</tt>終端の文字列へのポインタを指定します。
</dd>
34 <dd>ファイルのアクセス方法やオープン方法を決めるフラグです。このパラメータには次の組み合わせを指定します。
<br>
36 <tr><th>値
</th><th>意味
</th></tr>
37 <tr><td>FA_READ
</td><td>読み出しモードで開きます。読み書きする場合は
<tt>FA_WRITE
</tt>と共に指定します。
</td></tr>
38 <tr><td>FA_WRITE
</td><td>書き込みモードで開きます。読み書きする場合は
<tt>FA_READ
</tt>と共に指定します。
</td></tr>
39 <tr><td>FA_OPEN_EXISTING
</td><td>既存のファイルを開きます。ファイルが無いときはエラーになります。(デフォルト)
</td></tr>
40 <tr><td>FA_CREATE_NEW
</td><td>ファイルを作成します。同名のファイルがある場合は、
<tt>FR_EXIST
</tt>で失敗します。
</td></tr>
41 <tr><td>FA_CREATE_ALWAYS
</td><td>ファイルを作成します。同名のファイルがある場合は、サイズを
0にしてから開きます。
</td></tr>
42 <tr><td>FA_OPEN_ALWAYS
</td><td>既存のファイルを開きます。ファイルが無いときはファイルを作成します。
</td></tr>
43 <tr><td>FA_OPEN_APPEND
</td><td><tt>FA_OPEN_ALWAYS
</tt>と同じですが、リード/ライト ポインタはファイルの最後尾にセットされます。
</td></tr>
50 <div class=
"para ret">
53 <a href=
"rc.html#ok">FR_OK
</a>,
54 <a href=
"rc.html#de">FR_DISK_ERR
</a>,
55 <a href=
"rc.html#ie">FR_INT_ERR
</a>,
56 <a href=
"rc.html#nr">FR_NOT_READY
</a>,
57 <a href=
"rc.html#ok">FR_NO_FILE
</a>,
58 <a href=
"rc.html#np">FR_NO_PATH
</a>,
59 <a href=
"rc.html#in">FR_INVALID_NAME
</a>,
60 <a href=
"rc.html#de">FR_DENIED
</a>,
61 <a href=
"rc.html#ex">FR_EXIST
</a>,
62 <a href=
"rc.html#io">FR_INVALID_OBJECT
</a>,
63 <a href=
"rc.html#wp">FR_WRITE_PROTECTED
</a>,
64 <a href=
"rc.html#id">FR_INVALID_DRIVE
</a>,
65 <a href=
"rc.html#ne">FR_NOT_ENABLED
</a>,
66 <a href=
"rc.html#ns">FR_NO_FILESYSTEM
</a>,
67 <a href=
"rc.html#tm">FR_TIMEOUT
</a>,
68 <a href=
"rc.html#lo">FR_LOCKED
</a>,
69 <a href=
"rc.html#nc">FR_NOT_ENOUGH_CORE
</a>,
70 <a href=
"rc.html#tf">FR_TOO_MANY_OPEN_FILES
</a>
75 <div class=
"para desc">
77 <p>既存のファイルを開いたり、新しいファイルを作成します。関数が成功するとファイル オブジェクトが作成され、以降そのファイルに対するアクセスに使用します。ファイルを閉じるときは、
<a href=
"close.html"><tt>f_close
</tt></a>関数を使用します。何らかの変更が行われたファイルがその後正しく閉じられなかった場合、そのファイルが破損する場合があります。
</p>
78 <p>既に開かれているファイルを開く必要がある場合は、
<a href=
"appnote.html#dup">多重アクセス制御
</a>を参照してください。しかし、一つのファイルに対する書き込みモードを含む重複オープンは常に禁止です。
</p>
79 <p>ファイル アクセスを開始する前に、
<a href=
"mount.html"><tt>f_mount
</tt></a>関数を使ってそれぞれの論理ドライブにワーク エリア(ファイル システム オブジェクト)を与える必要があります。この初期化の後、その論理ドライブに対して全てのファイル関数が使えるようになります。
<tt>f_mkfs
</tt>関数と
<tt>f_fdsk
</tt>関数は、ワークエリア無しでも使えます。
</p>
83 <div class=
"para comp">
85 <p>全ての構成で使用可能です。
<tt>_FS_READONLY ==
1</tt>のときは、
<tt>FA_READ
</tt>と
<tt>FA_OPEN_EXISTING
</tt>以外の各フラグはサポートされません。
</p>
89 <div class=
"para use">
92 <span class=
"c">/* テキストファイルを読み出して表示 */
</span>
94 FATFS FatFs;
<span class=
"c">/* 論理ドライブのワーク エリア(ファイル システム オブジェクト) */
</span>
98 FIL fil;
<span class=
"c">/* ファイル オブジェクト */
</span>
99 char line[
82];
<span class=
"c">/* 行バッファ */
</span>
100 FRESULT fr;
<span class=
"c">/* 戻り値 */
</span>
103 <span class=
"c">/* デフォルト ドライブにワークエリアを与える */
</span>
104 f_mount(
&FatFs,
"",
0);
106 <span class=
"c">/* テキスト ファイルを開く */
</span>
107 fr = f_open(
&fil,
"message.txt", FA_READ);
108 if (fr) return (int)fr;
110 <span class=
"c">/*
1行ずつ読み出して表示 */
</span>
111 while (f_gets(line, sizeof line,
&fil))
114 <span class=
"c">/* ファイルを閉じる */
</span>
121 <span class=
"c">/* ドライブ
1のファイル
"file.bin" をドライブ
0へコピー */
</span>
125 FATFS fs[
2];
<span class=
"c">/* 論理ドライブのワークエリア(ファイル システム オブジェクト) */
</span>
126 FIL fsrc, fdst;
<span class=
"c">/* ファイル オブジェクト */
</span>
127 BYTE buffer[
4096];
<span class=
"c">/* File copy buffer */
</span>
128 FRESULT fr;
<span class=
"c">/* FatFs function common result code */
</span>
129 UINT br, bw;
<span class=
"c">/* File R/W count */
</span>
131 <span class=
"c">/* ドライブ
0,
1にワーク エリアを与える */
</span>
132 f_mount(
&fs[
0],
"0:",
0);
133 f_mount(
&fs[
1],
"1:",
0);
135 <span class=
"c">/* ドライブ
1のコピー元ファイルを開く */
</span>
136 res = f_open(
&fsrc,
"1:file.dat", FA_OPEN_EXISTING | FA_READ);
137 if (fr) return (int)fr;
139 <span class=
"c">/* ドライブ
0にコピー先ファイルを作成する */
</span>
140 res = f_open(
&fdst,
"0:file.dat", FA_CREATE_ALWAYS | FA_WRITE);
141 if (fr) return (int)fr;
143 <span class=
"c">/* コピー元からコピー先にデータ転送する */
</span>
145 res = f_read(
&fsrc, buffer, sizeof buffer,
&br);
<span class=
"c">/* コピー元からから読み出す */
</span>
146 if (res || br ==
0) break;
<span class=
"c">/* エラーかファイル終端 */
</span>
147 res = f_write(
&fdst, buffer, br,
&bw);
<span class=
"c">/* それをコピー先に書き込む */
</span>
148 if (res || bw
< br) break;
<span class=
"c">/* エラーかディスク満杯 */
</span>
151 <span class=
"c">/* 全てのファイルを閉じる */
</span>
155 <span class=
"c">/* ワーク エリアを開放する */
</span>
156 f_mount(NULL,
"0:",
0);
157 f_mount(NULL,
"1:",
0);
165 <div class=
"para ref">
167 <p><tt><a href=
"read.html">f_read
</a>,
<a href=
"write.html">f_write
</a>,
<a href=
"close.html">f_close
</a>,
<a href=
"sfile.html">FIL
</a>,
<a href=
"sfatfs.html">FATFS
</a></tt></p>
170 <p class=
"foot"><a href=
"../00index_j.html">戻る
</a></p>