Win32 API 日本語リファレンス
ホームStorage.CloudFilters › CF_FS_METADATA

CF_FS_METADATA

構造体
サイズx64: 48 バイト / x86: 48 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
BasicInfoFILE_BASIC_INFO40+0+0ファイルの基本情報(時刻・属性)を保持する構造体。
FileSizeLONGLONG8+40+40ファイルの論理サイズをバイトで表す。

各言語での定義

#include <windows.h>

// FILE_BASIC_INFO  (x64 40 / x86 40 バイト)
typedef struct FILE_BASIC_INFO {
    LONGLONG CreationTime;
    LONGLONG LastAccessTime;
    LONGLONG LastWriteTime;
    LONGLONG ChangeTime;
    DWORD FileAttributes;
} FILE_BASIC_INFO;

// CF_FS_METADATA  (x64 48 / x86 48 バイト)
typedef struct CF_FS_METADATA {
    FILE_BASIC_INFO BasicInfo;
    LONGLONG FileSize;
} CF_FS_METADATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILE_BASIC_INFO
{
    public long CreationTime;
    public long LastAccessTime;
    public long LastWriteTime;
    public long ChangeTime;
    public uint FileAttributes;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CF_FS_METADATA
{
    public FILE_BASIC_INFO BasicInfo;
    public long FileSize;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILE_BASIC_INFO
    Public CreationTime As Long
    Public LastAccessTime As Long
    Public LastWriteTime As Long
    Public ChangeTime As Long
    Public FileAttributes As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CF_FS_METADATA
    Public BasicInfo As FILE_BASIC_INFO
    Public FileSize As Long
End Structure
import ctypes
from ctypes import wintypes

class FILE_BASIC_INFO(ctypes.Structure):
    _fields_ = [
        ("CreationTime", ctypes.c_longlong),
        ("LastAccessTime", ctypes.c_longlong),
        ("LastWriteTime", ctypes.c_longlong),
        ("ChangeTime", ctypes.c_longlong),
        ("FileAttributes", wintypes.DWORD),
    ]

class CF_FS_METADATA(ctypes.Structure):
    _fields_ = [
        ("BasicInfo", FILE_BASIC_INFO),
        ("FileSize", ctypes.c_longlong),
    ]
#[repr(C)]
pub struct FILE_BASIC_INFO {
    pub CreationTime: i64,
    pub LastAccessTime: i64,
    pub LastWriteTime: i64,
    pub ChangeTime: i64,
    pub FileAttributes: u32,
}

#[repr(C)]
pub struct CF_FS_METADATA {
    pub BasicInfo: FILE_BASIC_INFO,
    pub FileSize: i64,
}
import "golang.org/x/sys/windows"

type FILE_BASIC_INFO struct {
	CreationTime int64
	LastAccessTime int64
	LastWriteTime int64
	ChangeTime int64
	FileAttributes uint32
}

type CF_FS_METADATA struct {
	BasicInfo FILE_BASIC_INFO
	FileSize int64
}
type
  FILE_BASIC_INFO = record
    CreationTime: Int64;
    LastAccessTime: Int64;
    LastWriteTime: Int64;
    ChangeTime: Int64;
    FileAttributes: DWORD;
  end;

  CF_FS_METADATA = record
    BasicInfo: FILE_BASIC_INFO;
    FileSize: Int64;
  end;
const FILE_BASIC_INFO = extern struct {
    CreationTime: i64,
    LastAccessTime: i64,
    LastWriteTime: i64,
    ChangeTime: i64,
    FileAttributes: u32,
};

const CF_FS_METADATA = extern struct {
    BasicInfo: FILE_BASIC_INFO,
    FileSize: i64,
};
type
  FILE_BASIC_INFO {.bycopy.} = object
    CreationTime: int64
    LastAccessTime: int64
    LastWriteTime: int64
    ChangeTime: int64
    FileAttributes: uint32

  CF_FS_METADATA {.bycopy.} = object
    BasicInfo: FILE_BASIC_INFO
    FileSize: int64
struct FILE_BASIC_INFO
{
    long CreationTime;
    long LastAccessTime;
    long LastWriteTime;
    long ChangeTime;
    uint FileAttributes;
}

struct CF_FS_METADATA
{
    FILE_BASIC_INFO BasicInfo;
    long FileSize;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CF_FS_METADATA サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; BasicInfo : FILE_BASIC_INFO (+0, 40byte)  varptr(st)+0 を基点に操作(40byte:入れ子/配列)
; FileSize : LONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILE_BASIC_INFO
    #field int64 CreationTime
    #field int64 LastAccessTime
    #field int64 LastWriteTime
    #field int64 ChangeTime
    #field int FileAttributes
#endstruct

#defstruct global CF_FS_METADATA
    #field FILE_BASIC_INFO BasicInfo
    #field int64 FileSize
#endstruct

stdim st, CF_FS_METADATA        ; NSTRUCT 変数を確保
st->FileSize = 100
mes "FileSize=" + st->FileSize