- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的 C# 应用程序中,我已经有了一种检查文件系统的方法,但我想利用从主文件表 (MFT) 读取的优势,因为它要快得多。我了解 1) 它是专有规范,因此如有更改,恕不另行通知,以及 2) 只有当应用程序在管理权限下运行时才能访问它。
我设法通过 this code 读取了主文件表.从 MFT 查询中,我得到一个文件名和一个所谓的文件引用号。我找不到的是如何转换为 .NET FileInfo 对象,甚至转换为 Windows API 文件句柄,以便我可以获得有关相关文件/文件夹的更多信息,例如:文件大小、完整路径、日期邮票等
最佳答案
当您潜伏在 MFT 中时,可以采用两种直接的方法打开文件 - 您可以调用 OpenFileByID使用该文件引用号(Vista 和更高版本),或者您可以通过遍历您在阅读 MFT 时构建的列表然后调用 CreateFile 来构建完全限定的文件名。与组装名称。
您想从 CreateFile 或 OpenFileByID 获取句柄到 SafeFileHandle:
[DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
internal static extern SafeFileHandle CreateFile( string lpFileName, EFileAccess dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile );
[DllImport( "kernel32.dll", SetLastError = true )]
internal static extern SafeFileHandle OpenFileById( IntPtr volumeHandle, ref FileIdDescriptor lpFileId, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwFlagsAndAttributes );
一旦您拥有 SafeFileHandle(并且您已检查它是否有效),您就可以将它传递给 FileStream 构造函数并像往常一样读/写文件。
每个文件都在 MFT 中表示,但有一些注意事项。例如,单个文件可以在文件层次结构中的多个位置,但所有文件都有一个 MFT 条目 - 这些是所谓的硬链接(hard link)(它们不是副本 - 有多个入口点一个文件 - 头痛比比皆是)。这些有成千上万。有用于查询硬链接(hard link)的 API,但它变得很丑陋。
关于c# - 从 NTFS-MFT 引用号获取文件信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724343/
我在 NTFS 中有一个文件夹,其中包含数万个文件。我已经删除了该文件夹中的所有文件,保存 1。我运行 contig.exe 对该文件夹进行碎片整理,所以现在它只有 1 个片段。但是,该文件夹的大小仍
我有一个程序,正如现在所做的那样,它有一个数据目录,里面有大约 10-30K 的文件,它开始出现问题。我是否应该期望这会导致问题和我调整文件结构的唯一解决方案,或者这是否表明存在其他问题? 最佳答案
对于一个项目,我想获取 NTFS 分区上所有可用/已用集群的列表。为此,我必须转储 $Bitmap 文件并解析其内容。 Web 上的 API 和示例很少,但它们似乎不起作用。是否有一种简单的方法/代码
我可以使用 GetFileInformationByHandle确定与文件关联的硬链接(hard link)的数量。如何枚举构成这些链接的路径? 例如,如果 C:\TEMP_1.BIN和 C:\TEM
如果是这样,那么您如何证明产生的间接费用(日记等)是合理的?如果没有,那么页面文件怎么会碎片化呢?此外,增加集群大小是否会提高页面文件性能(集群空闲空间不是问题)? 最佳答案 您可以查看 filemo
我的问题是关于 NTFS Fs 上的文件分配方法。 我有两个主要问题- 当我在 NTFS 上创建文件时,它是否连续存储在物理硬盘上? 如果没有 - 有没有办法创建一个文件,这样当我写入它时,数据会连续
我想知道 NTFS 元数据中包含哪些信息。 但是我在任何地方都找不到那张纸。 我猜元数据有一个文件名、一个大小和一个属性等。 NTFS 元数据是否也有短路径名称? NTFS 元数据中包含哪些信息? 你
我是 Pinvoke 的新手。当我可以访问目录时,我想在找到 root 后获取 mft。我想使用 DeviceIoControl,例如下面的代码: BOOL DeviceIoControl( (
我的双操作系统 PC(XP Pro 和 Ubuntu)出了点问题,现在它只能在从 Ubuntu Live CD (8.04 LTS) 启动时工作。 我正在将我的数据备份到外部 HDD 以重新安装所有内
我需要从 Java 读取和修改 NTFS 分区上文件的“压缩”属性。我在 java.nio.file.attribute 中想象了一些东西package 可以做到——见鬼,它是一个足够复杂的包,但我找
我想知道 NTFS 对存储在其上的数据提供了什么样的可靠性保证?例如,假设我正在打开一个文件,追加到末尾,然后关闭它,并且在这个操作过程中随机断电。我能找到完全损坏的文件吗? 我问这个问题是因为我刚遇
根据 Wikipedia NTFS 允许两个大小写不同的相似名称(如 Readme.txt 与 readme.txt),并且只有 Windows 文件 API 会阻止它。 Current Window
我在 windows xp 上测试过这个。 如果我这样做 创建一个文件。 写入文件。 关闭文件。(然后,文件的 LastWriteTime 被更改) 但如果我这样做 创建一个文件。 设置文件的 Las
我刚刚开始编写一些程序来处理 WinXP 系统上具有非英文名称的文件名。我已经完成了一些关于 unicode 的推荐阅读,我想我已经了解了基本概念,但有些部分对我来说仍然不是很清楚。 具体来说,NTF
使用 NTFS 的 Windows 如何处理大量文件和目录? 在遇到性能问题或其他问题之前,是否有关于您可以放置在单个目录中的文件或目录限制的任何指导? 例如拥有一个包含 100,000 个文件夹
鉴于微软有 deprecated Transactional NTFS (TxF) : Microsoft strongly recommends developers utilize alterna
我想为文件存储一些与应用程序相关的元数据,而 NTFS 备用数据流 (AltDS) 将允许我将此元数据直接存储在文件中,而不是存储在单独的数据库中。 我只是觉得这不是一个好主意。我知道这仅适用于 NT
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在编写一些代码来解析 NTFS 卷中磁盘上的 MFT。这很简单,但是一个特殊的极端案例引起了我的注意,我在互联网上的任何地方都找不到明确的答案。 对于 NTFS 中的普通文件,如果文件的属性多于单
我想运行一个脚本来检查驱动器,看看是否有一个所有人设置为 NTFS 权限。目前我正在运行: Get-ChildItem D:\ -Recurse | Where-Object { (Get-A
我是一名优秀的程序员,十分优秀!