GetFileAttributes ファイルの属性取得

Cの宣言:

DWORD GetFileAttributes(LPCSTR FileName);

VBの宣言:

Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal FileName As String) As Long

説明:

ファイルまたはディレクトリの属性を取得する。

ファイルの中には、属性の取得に失敗するものもある(pagefile.sysなど)。このような場合、FindFirstFileなどを使用して属性を取得する必要がある。

引数の意味は、以下の通り。
FileName 属性の取得元ファイル名またはディレクトリ名

戻り値は、取得した属性値で、以下のフラグの論理和である。属性の取得に失敗した場合、-1が返される。
FILE_ATTRIBUTE_ARCHIVE アーカイブファイル/ディレクトリ
FILE_ATTRIBUTE_COMPRESSED 圧縮ファイル/ディレクトリ
FILE_ATTRIBUTE_DIRECTORY ディレクトリ
FILE_ATTRIBUTE_HIDDEN 隠しファイル/ディレクトリ
FILE_ATTRIBUTE_NORMAL ノーマルファイル/ディレクトリ
FILE_ATTRIBUTE_READONLY 読み込み専用ファイル/ディレクトリ
FILE_ATTRIBUTE_SYSTEM システムファイル/ディレクトリ
FILE_ATTRIBUTE_TEMPORARY 一時ファイル/ディレクトリ
FILE_ATTRIBUTE_ATOMIC_WRITE 不明
FILE_ATTRIBUTE_XACTION_WRITE 不明
FILE_ATTRIBUTE_OFFLINE 不明

サンプル(C言語):

void DispFileAttr()
{
	DWORD fa;

	fa = GetFileAttributes("c:\\command.com");

	if(fa & FILE_ATTRIBUTE_ARCHIVE) printf("アーカイブ\n");
	if(fa & FILE_ATTRIBUTE_COMPRESSED) printf("圧縮\n");
	if(fa & FILE_ATTRIBUTE_DIRECTORY) printf("ディレクトリ\n");
	if(fa &	FILE_ATTRIBUTE_HIDDEN) printf("隠しファイル/ディレクトリ\n");
	if(fa & FILE_ATTRIBUTE_NORMAL) printf("ノーマル\n");
	if(fa & FILE_ATTRIBUTE_READONLY) printf("書込み禁止\n");
	if(fa & FILE_ATTRIBUTE_SYSTEM) printf("システム\n");
	if(fa & FILE_ATTRIBUTE_TEMPORARY) printf("一時ファイル/ディレクトリ\n");
}

サンプル(VB):

' ファイルの属性を表示
Private Sub DispFileAttr()
	Dim Attr As Long
	Dim Msg As String

	' 属性の取得
	Attr = GetFileAttributes("c:\command.com")

	'メッセージの作成
	If (Attr And FILE_ATTRIBUTE_ARCHIVE) <> 0 Then Msg = Msg & "アーカイブ" & vbCr
	If (Attr And FILE_ATTRIBUTE_COMPRESSED) <> 0 Then Msg = Msg & "圧縮" & vbCr
	If (Attr And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then Msg = Msg & "隠しファイル" & vbCr
	If (Attr And FILE_ATTRIBUTE_HIDDEN) <> 0 Then Msg = Msg & "ノーマル" & vbCr
	If (Attr And FILE_ATTRIBUTE_READONLY) <> 0 Then Msg = Msg & "書込み禁止" & vbCr
	If (Attr And FILE_ATTRIBUTE_SYSTEM) <> 0 Then Msg = Msg & "システム" & vbCr
	If (Attr And FILE_ATTRIBUTE_TEMPORARY) <> 0 Then Msg = Msg & "一時ファイル/ディレクトリ" & vbCr

	'属性の表示
	MsgBox Msg
End Sub

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。