FatFS/doc/ja/open.html
2025-09-11 08:52:19 +03:00

142 lines
5.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../css_j.css" type="text/css" media="screen" title="ELM Default">
<title>FatFs - f_open</title>
</head>
<body>
<div class="para">
<h2>f_open</h2>
<p>ファイルをオープンまたは作成します。</p>
<pre>
FRESULT f_open (
FIL* <em>FileObject</em>, // 作成するファイルオブジェクト構造体へのポインタ
const char* <em>FileName</em>, // ファイルのフルパス名へのポインタ
BYTE <em>ModeFlags</em> // モードフラグ
);
</pre>
</div>
<div class="para">
<h4>パラメータ</h4>
<dl class="par">
<dt>FileObject</dt>
<dd>新しく作成するファイルオブジェクト構造体へのポインタを指定します。以降、このファイルを閉じるまでそのファイルオブジェクトを使用してファイル操作をします。構造体メンバの<tt>buffer</tt>は、オープン前または直後にそのファイルで使用するR/Wバッファへのアドレスで初期化しておく必要があります<tt>FA_UNBUFFERED</tt>を指定した場合はバッファは不要)。</dd>
<dt>FileName</dt>
<dd>作成する (またはオープンする) ファイルのフルパス名が入った<tt>'\0'</tt>で終わる文字列へのポインタを指定します。ディレクトリセパレータには<tt>'/'</tt>を使用します。FatFsモジュールにはカレントディレクトリの概念がないので、パスはルートディレクトリから辿る絶対パスとなります。文字列先頭のスペースはスキップされます。パス先頭の<tt>'/'</tt>はあってもなくてもかまいません。</dd>
<dt>ModeFlags</dt>
<dd>ファイルのアクセス方法やオープン方法を決めるフラグです。このパラメータには次の組み合わせを指定します。<br>
<table class="lst">
<tr><th></th><th>意味</th></td>
<tr><td>FA_READ</td><td>読み出しモードでオープンします。読み書きする場合は<tt>FA_WRITE</tt>と共に指定します。</td></td>
<tr><td>FA_WRITE</td><td>書き込みモードでオープンします。読み書きする場合は<tt>FA_READ</tt>と共に指定します。</td></td>
<tr><td>FA_UNBUFFERED</td><td>
FatFsでのみ指定可。指定するとファイルR/Wバッファを使用せず、メモリを節約できます。<br>
read/write/seekは512の整数倍単位でなければなりません。指定しない場合は、ファイル<br>
R/Wバッファファイルオブジェクト構造体メンバの<tt>buffer</tt>で指定)を使用。</td></td>
<tr><td>FA_OPEN_EXISTING</td><td>既存のファイルを開きます。ファイルが無いときはエラーになります。</td></td>
<tr><td>FA_CREATE_ALWAYS</td><td>ファイルを作成します。既存のファイルがある場合は、サイズを0にしてから開きます。</td></td>
<tr><td>FA_OPEN_ALWAYS</td><td>既存のファイルを開きます。ファイルが無いときはファイルを作成します。</td></td>
</table>
</dd>
</dl>
</div>
<div class="para">
<h4>戻り値</h4>
<dl class="ret">
<dt>FR_OK</dt>
<dd>正常終了。以降、<tt><em>FileObject</em></tt>構造体を使ってこのファイルを操作できます。ファイルを閉じるときは、<tt><a href="close.html">f_close()</a></tt>を使用します。</dd>
<dt>FR_NOFILE</dt>
<dd>ファイルが見つからない。</dd>
<dt>FR_NOPATH</dt>
<dd>パスが見つからない。</dd>
<dt>FR_INVALID_NAME</dt>
<dd>ファイル名が不正。</dd>
<dt>FR_DENIED</dt>
<dd>アクセスが拒否された。リードオンリーファイルの書き込みモードオープン、同名のディレクトリまたはリードオンリファイルがある状態でのファイル作成、ディスクまたはディレクトリテーブルが満杯でファイルを作成できないなど。</dd>
<dt>FR_NOT_READY</dt>
<dd>メディアがセットされていないなど、ディスクドライブが動作不能状態。</dd>
<dt>FR_WRITE_PROTECTED</dt>
<dd>メディアが書き込み禁止状態で書き込みオープンまたはファイル作成をした。</dd>
<dt>FR_RW_ERROR</dt>
<dd>ディスクアクセスでエラーが発生した。</dd>
<dt>FR_INCORRECT_DISK_CHANGE</dt>
<dd>不正なメディアの取り外しがあった。ファイルを開いたままのメディア交換など。</dd>
<dt>FR_NOT_ENABLED</dt>
<dd>FatFsモジュールが停止状態。</dd>
<dt>FR_NO_FILESYSTEM</dt>
<dd>ディスク上に有効なFATパーテーションが見つからない。</dd>
</dl>
</div>
<div class="para">
<h4>解説</h4>
<p>FatFsモジュールの使用を開始するにはまず、FatFsモジュールにワークエリア構造体<tt>FATFS</tt>を割り当てます。確保したワークエリアを0で初期化したあと、FatFsモジュールのグローバル変数<em>FatFs</em>にそのアドレスを代入するだけでモジュールは動作可能状態になり、ファイル関数が使えるようになります。</p>
<p>リードオンリー構成では、<tt>FA_WRITE, FA_CREATE_ALWAYS, FA_OPEN_ALWAYS</tt>の各フラグはサポートされません。</p>
</div>
<div class="para">
<h4>使用例</h4>
<pre>
void main ()
{
FATFS fs; // FatFs work area
FIL fsrc, fdst; // file structures
BYTE fbuff[512*2]; // file r/w buffers (not required for Tiny-FatFs)
BYTE buffer[4096]; // file copy buffer
FRESULT res; // FatFs function common result code
WORD br, bw; // File R/W count
// Activate FatFs module
memset(&fs, 0, sizeof(FATFS));
FatFs = &fs;
// Open source file
fsrc.buffer = fbuff+0; // (not required for Tiny-FatFs)
res = f_open(&fsrc, "/srcfile.dat", FA_OPEN_EXISTING | FA_READ);
if (res) die(res);
// Create destination file
fdst.buffer = fbuff+512; // (not required for Tiny-FatFs)
res = f_open(&fdst, "/dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE);
if (res) die(res);
// Copy source to destination
for (;;) {
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
if (res) die(res);
if (br == 0) break;
res = f_write(&fdst, buffer, br, &bw);
if (res) die(res);
if (bw &lt; br) break;
}
// Close all files
f_close(&fsrc);
f_close(&fdst);
// Deactivate FatFs module
FatFs = NULL;
}
</pre>
</div>
<div class="para">
<h4>参照</h4>
<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>
</div>
<p class="foot"><a href="../00index_j.html">戻る</a></p>
</body>
</html>