OpenFile 関数 (winbase.h)

ファイルを作成、開く、再度開く、または削除します。

メモ この関数の機能は限られており、推奨されません。 新しいアプリケーション開発の場合は、 CreateFile 関数を使用します。
 

構文

HFILE OpenFile(
  [in]  LPCSTR     lpFileName,
  [out] LPOFSTRUCT lpReOpenBuff,
  [in]  UINT       uStyle
);

パラメーター

[in] lpFileName

ファイルの名前です。

文字列は、8 ビット Windows 文字セットの文字で構成されている必要があります。 OpenFile 関数では、Unicode ファイル名や名前付きパイプを開く機能はサポートされていません。

[out] lpReOpenBuff

最初に開いたときにファイルに関する情報を受け取る OFSTRUCT 構造体へのポインター。

この構造体は、 OpenFile 関数の後続の呼び出しで使用して、開いているファイルを確認できます。

OFSTRUCT 構造体には、長さが 128 文字のOFS_MAXPATHNAME文字に制限されたパス文字列メンバーが含まれています。 このため、 OpenFile 関数を使用して、パスの長さが 128 文字を超えるファイルを開くことはできません。 CreateFile 関数には、このパスの長さの制限はありません。

[in] uStyle

実行するアクション。

このパラメーターには、次の 1 つ以上の値を指定できます。

説明
OF_CANCEL
0x00000800
無視されます。

[キャンセル] ボタンを含むダイアログ ボックスを生成するには、OF_PROMPTを使用します。

OF_CREATE
0x00001000
新しいファイルを 1 つ作成します。

ファイルが存在する場合は、長さが 0 に切り捨てられます。

OF_DELETE
0x00000200
ファイルを削除します。
OF_EXIST
0x00004000
ファイルを開き、閉じます。

ファイルの存在をテストするには、これを使用します。

OF_PARSE
0x00000100
OFSTRUCT 構造体を埋めますが、それ以外の操作は行いません。
OF_PROMPT
0x00002000
要求されたファイルが存在しない場合は、ダイアログ ボックスを表示します。

ダイアログ ボックスは、システムがファイルを見つけられないことをユーザーに通知し、[ 再試行] ボタンと [キャンセル] ボタンが含まれています。 [キャンセル] ボタンをクリックすると、OpenFile にファイルが見つかりませんというエラー メッセージが返されます。

OF_READ
0x00000000
読み取り専用でファイルを開きます。
OF_READWRITE
0x00000002
読み取り/書き込みアクセス許可がある場合にファイルを開きます。
OF_REOPEN
0x00008000
再度開くバッファー内の情報を使用してファイルを開きます。
OF_SHARE_COMPAT
0x00000000
MS-DOS ベースのファイル システムの場合、 は互換モードでファイルを開き、指定したコンピューター上の任意のプロセスでファイルを何度でも開きます。

他の共有モードでファイルを開く他の作業は失敗します。 このフラグは、CreateFile 関数のFILE_SHARE_READ|FILE_SHARE_WRITE フラグにマップされます。

OF_SHARE_DENY_NONE
0x00000040
他のプロセスへの読み取りまたは書き込みアクセスを拒否せずにファイルを開きます。

MS-DOS ベースのファイル システムでは、ファイルが他のプロセスによって互換モードで開かれている場合、関数は失敗します。

このフラグは、CreateFile 関数のFILE_SHARE_READ|FILE_SHARE_WRITE フラグにマップされます。

OF_SHARE_DENY_READ
0x00000030
ファイルを開き、他のプロセスへの読み取りアクセスを拒否します。

MS-DOS ベースのファイル システムでは、ファイルが互換モードで開かれている場合、または他のプロセスによる読み取りアクセスの場合、関数は失敗します。

このフラグは、CreateFile 関数のFILE_SHARE_WRITE フラグにマップされます。

OF_SHARE_DENY_WRITE
0x00000020
ファイルを開き、他のプロセスへの書き込みアクセスを拒否します。

MS-DOS ベースのファイル システムでは、ファイルが互換モードで開かれている場合、または他のプロセスによる書き込みアクセスのために、関数は失敗します。

このフラグは、CreateFile 関数のFILE_SHARE_READ フラグにマップされます。

OF_SHARE_EXCLUSIVE
0x00000010
排他モードでファイルを開き、他のプロセスへの読み取り/書き込みアクセスの両方を拒否します。 ファイルが読み取り/書き込みアクセス用に他のモードで開かれている場合、現在のプロセスでも、関数は失敗します。
OF_VERIFY
ファイルの日付と時刻が、以前に開かれた日時と同じであることを確認します。

これは、読み取り専用ファイルの追加のチェックとして役立ちます。

OF_WRITE
0x00000001
書き込みアクセスの場合にのみファイルを開きます。

戻り値

関数が成功した場合、戻り値はファイル I/O の実行時に使用するファイル ハンドルを指定します。 ファイルを閉じるには、このハンドルを使用して CloseHandle 関数を呼び出します。

関数が失敗した場合、戻り値は HFILE_ERROR。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

lpFileName パラメーターでファイル名と拡張子のみが指定されている場合、この関数は次のディレクトリと表示される順序で一致するファイルを検索します。

  1. アプリケーションが読み込まれるディレクトリ。
  2. 現在のフォルダー。
  3. Windows システム ディレクトリ。

    GetSystemDirectory 関数を使用して、このディレクトリのパスを取得します。

  4. 16 ビット Windows システム ディレクトリ。

    このディレクトリのパスを取得する関数はありませんが、検索されます。

  5. Windows ディレクトリ。

    GetWindowsDirectory 関数を使用して、このディレクトリのパスを取得します。

  6. PATH 環境変数に一覧表示されているディレクトリ。
lpFileName パラメーターにワイルドカード文字を含めることはできません。

OpenFile 関数は、16 ビット Windows OpenFile 関数がサポートするOF_SEARCH フラグをサポートしていません。 OF_SEARCH フラグは、ファイル名に完全パスが含まれている場合でも、一致するファイルを検索するようにシステムに指示します。 SearchPath 関数を使用してファイルを検索します。

共有違反は、 uStyle パラメーターの値が他のアクセス フラグを持つ OF_DELETE アクセス フラグ OR'ed であり、リモート ファイルまたはディレクトリが共有アクセスで開かされていない場合に、リモート コンピューターでファイルまたはディレクトリを開こうとした 場合FILE_SHARE_DELETE 発生します。 このシナリオで共有違反を回避するには、 OF_DELETE アクセス権のみを持つリモート ファイルまたはディレクトリを開くか、削除のために最初にファイルまたはディレクトリを開かずに DeleteFile を呼び出します。

Windows 8 と Windows Server 2012 では、この関数は、次のテクノロジによってサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル はい
SMB 3.0 Transparent Failover (TFO) はい
スケールアウト ファイル共有 (SO) を使う SMB 3.0 はい
クラスターの共有ボリューム ファイル システム (CsvFS) はい
Resilient File System (ReFS) はい
 

CsvFs によって、圧縮されたファイルのリダイレクトされた IO が実行されます。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CreateFile

File Management 関数

GetSystemDirectory

GetWindowsDirectory

OFSTRUCT

SearchPath