- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取 directory handle为了检索目录的标识符。文档(上面链接)指定需要将 FILE_FLAG_BACKUP_SEMANTICS
标志传递给 CreateFile
函数以检索句柄本身。
不过在咨询pinvoke's kernel32.dll
签名,大多数 C# 候选人如下所示:
[DllImport("kernell32.dll", SetLastError = true)]
public static extern SafeFileHandle CreateFile(
string lpFileName,
[MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
[MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
IntPtr securityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes dwFlagsAndAttributes,
IntPtr hTemplateFile
);
上述一对一参数映射到C++ CreateFile暗示 dwFlagsAndAttributes
参数是 FILE_FLAG_BACKUP_SEMANTICS
的占位符;但是,FileAttribute
枚举似乎与该标志不匹配。
现在(它坏了)我的电话看起来像:
var createdFolder =
FileSystemInteractor.CreateFile(
fullPathWithFolderName,
FileAccess.Read,
FileShare.Read,
IntPtr.Zero,
FileMode.Open,
Kernel32.FILE_FLAG_BACKUP_SEMANTICS,
IntPtr.Zero
);
Kernel32
显然包含正确的标志。收到的编译器错误是:
cannot convert from 'uint' to 'System.IO.FileAttributes'
这个错误是有道理的;我只是不确定我能够对签名进行哪些按摩,因为我是 extern
函数的新手。
是否有与所需标志对应的 FileAttributes
?我需要更改 extern
签名吗?
最佳答案
在您的代码中包含此枚举定义:
[Flags]
private enum File_Attributes : uint
{
Readonly = 0x00000001,
Hidden = 0x00000002,
System = 0x00000004,
Directory = 0x00000010,
Archive = 0x00000020,
Device = 0x00000040,
Normal = 0x00000080,
Temporary = 0x00000100,
SparseFile = 0x00000200,
ReparsePoint = 0x00000400,
Compressed = 0x00000800,
Offline = 0x00001000,
NotContentIndexed = 0x00002000,
Encrypted = 0x00004000,
Write_Through = 0x80000000,
Overlapped = 0x40000000,
NoBuffering = 0x20000000,
RandomAccess = 0x10000000,
SequentialScan = 0x08000000,
DeleteOnClose = 0x04000000,
BackupSemantics = 0x02000000,
PosixSemantics = 0x01000000,
OpenReparsePoint = 0x00200000,
OpenNoRecall = 0x00100000,
FirstPipeInstance = 0x00080000
}
System.IO中定义的文件属性不包含很多属性。
关于c# - CreateFile、FILE_FLAG_BACKUP_SEMANTICS、目录管理和句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600470/
我正在尝试获取 directory handle为了检索目录的标识符。文档(上面链接)指定需要将 FILE_FLAG_BACKUP_SEMANTICS 标志传递给 CreateFile 函数以检索句柄
我也在尝试使用 FILE_FLAG_BACKUP_SEMANTICS 后更改目录的时间戳。我的代码片段如下 int SetDirectoryTime(char *Path) {
如何为 fstream 对象设置标志 FILE_FLAG_BACKUP_SEMANTICS? 您可以使用 fstream 设置大多数标志,但似乎这个不可用。您可以阅读有关标志 here 的信息. 最佳
我正在尝试使用 FILE_FLAG_BACKUP_SEMANTICS 来绕过文件权限,但如果我请求 GENERIC_ALL 或等效的 FILE_ALL_ACCESS 它就不起作用作为访问掩码。 Cre
我是一名优秀的程序员,十分优秀!