SetFileAttributesW 関数 (fileapi.h)

ファイルまたはディレクトリの属性を設定します。

この操作をトランザクション操作として実行するには、 SetFileAttributesTransacted 関数を 使用します。

構文

BOOL SetFileAttributesW(
  [in] LPCWSTR lpFileName,
  [in] DWORD   dwFileAttributes
);

パラメーター

[in] lpFileName

属性を設定するファイルの名前。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前もって指定しなくても、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 名前付けファイル、パス、および名前空間 」の「パスの最大長制限」セクションを参照してください。

[in] dwFileAttributes

ファイルに設定するファイル属性。

このパラメーターには、ビットごとの OR 演算子を使用して組み合わせた 1 つ以上の値を指定できます。 ただし、他のすべての値 はFILE_ATTRIBUTE_NORMALをオーバーライドします。

この関数では、すべての属性がサポートされているわけではありません。 詳細については、「解説」を参照してください。

サポートされている属性値の一覧を次に示します。

意味
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
アーカイブ ファイルまたはディレクトリであるファイルまたはディレクトリ。 アプリケーションでは通常、この属性を使用して、バックアップまたは削除のためにファイルをマークします。
FILE_ATTRIBUTE_HIDDEN
2 (0x2)
ファイルまたはディレクトリは非表示です。 通常のディレクトリ一覧には含まれません。
FILE_ATTRIBUTE_NORMAL
128 (0x80)
他の属性が設定されていないファイル。 この属性は、単独で使った場合にのみ有効です。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
8192 (0x2000)
ファイルまたはディレクトリには、コンテンツ インデックス サービスによってインデックスが付けられません。
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
ファイルのデータはすぐに使用できません。 この属性は、ファイル データが物理的にオフライン ストレージに移動されたことを示します。 この属性はリモート記憶域 (階層型ストレージ管理ソフトウェア) によって使われます。 アプリケーションはこの属性を任意に変更しないでください。
FILE_ATTRIBUTE_READONLY
1 (0x1)
読み取り専用のファイル。 アプリケーションはこのファイルを読み取ることができますが、書き込んだり削除したりすることはできません。 この属性は、ディレクトリでは無視されます。 詳細については、「Windows Server 2003、Windows XP、または Windows Vista では、フォルダーの読み取り専用またはシステム属性を表示または変更できません。
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
オペレーティング システムがその一部を使う、または排他的に使うファイルまたはディレクトリ。
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
一時的なストレージとして使われているファイル。 十分なキャッシュ メモリを使用できる場合、ファイル システムは大容量記憶装置へのデータの書き戻しを回避します。なぜなら、通常はハンドルが閉じられると、アプリケーションは一時ファイルを削除するからです。 このようなシナリオでは、システムはデータの書き込みを完全に回避できます。 それ以外の場合は、ハンドルが閉じられた後にデータが書き込まれます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

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

解説

次の表では、 SetFileAttributes を使用して設定できない属性を設定する方法について説明します。 すべてのファイル属性値とその説明の完全な一覧については、「 ファイル属性定数」を参照してください。

属性 設定方法
FILE_ATTRIBUTE_COMPRESSED

0x800

ファイルの圧縮状態を設定するには、FSCTL_SET_COMPRESSION操作で DeviceIoControl 関数を使用します。
FILE_ATTRIBUTE_DEVICE

0x40

予約済みです。使わないでください。
FILE_ATTRIBUTE_DIRECTORY

0x10

ファイルをディレクトリに変換することはできません。 ディレクトリを作成するには、 CreateDirectory または CreateDirectoryEx 関数 使用します。
FILE_ATTRIBUTE_ENCRYPTED

0x4000

暗号化されたファイルを作成するには、 CreateFile 関数と FILE_ATTRIBUTE_ENCRYPTED 属性を使用します。 既存のファイルを暗号化されたファイルに変換するには、 EncryptFile 関数を使用します。
FILE_ATTRIBUTE_REPARSE_POINT

0x400

再解析ポイントをファイルまたはディレクトリに関連付けるには、 DeviceIoControl 関数と FSCTL_SET_REPARSE_POINT 操作を使用します。
FILE_ATTRIBUTE_SPARSE_FILE

0x200

ファイルのスパース属性を設定するには、FSCTL_SET_SPARSE操作で DeviceIoControl 関数を使用します。
 

Transacted Operations

ファイルがトランザクションで変更のために開かれている場合、トランザクションがコミットされるまで、他のスレッドは変更のためにファイルを開くできません。 そのため、トランザクションスレッドが最初にファイルを開くと、トランザクションがコミットされる前にファイルを変更しようとする後続のスレッドは共有違反を受け取ります。 トランザクション以外のスレッドがトランザクションスレッドの前にファイルを変更しても、トランザクションが開こうとしたときにファイルが開いている場合、トランザクションはエラー ERROR_TRANSACTIONAL_CONFLICTを受け取ります。

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

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

例については、「 ファイル属性の取得と変更」を参照してください。

注意

fileapi.h ヘッダーは、SetFileAttributes をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

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

関連項目

ファイル属性定数

File Management 関数

GetFileAttributes

SetFileAttributesTransacted

シンボリック リンク

トランザクション NTFS