Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用唯一ID打开Windows文件_Windows_Filesystems - Fatal编程技术网

使用唯一ID打开Windows文件

使用唯一ID打开Windows文件,windows,filesystems,Windows,Filesystems,是否可以仅使用Windows资源管理器或MS-DOS访问文件?我在想,我可以键入类似于{FILE_ID.VOLUME}ex.{2319237819273897.1}的内容,然后打开文件c:\temp\myfile.txt。此功能对于访问已移动到不同目录的文件非常有用,因为唯一文件ID在文件移动(甚至多次)后保持不变,并且在删除文件之前保持不变。这取决于文件系统。FAT没有文件ID,但在Windows低级API中,有通过唯一ID打开文件的机制。如何处理这个ID取决于文件系统驱动程序——FAT动态生

是否可以仅使用Windows资源管理器或MS-DOS访问文件?我在想,我可以键入类似于
{FILE_ID.VOLUME}
ex.
{2319237819273897.1}
的内容,然后打开文件c:\temp\myfile.txt。此功能对于访问已移动到不同目录的文件非常有用,因为唯一文件ID在文件移动(甚至多次)后保持不变,并且在删除文件之前保持不变。

这取决于文件系统。FAT没有文件ID,但在Windows低级API中,有通过唯一ID打开文件的机制。如何处理这个ID取决于文件系统驱动程序——FAT动态生成ID,而NTFS以某种方式使用唯一的文件ID(我不知道细节)

Windows中添加了文件ID支持,以便与某些Unix功能兼容,但这并不是一个广泛使用的功能。我不知道您是否可以通过Win32 API(以及资源管理器)使用它


更新:多亏了Harry Johnston的评论,现在我知道您可以使用Vista中出现的WinAPI函数打开该文件

来自Windows内部:“除了存储分配给文件或目录的对象ID[…],NTFS还在$O索引[…]中保持对象ID与其文件参考号之间的对应关系。”。索引按对象ID整理条目,使NTFS能够轻松地根据其ID快速定位文件。此功能允许应用程序使用未记录的本机API功能,使用其对象ID打开文件或目录。“如果正确,可以使用其ID访问NTFS卷中的文件,但是它不能通过Windows API轻易获得。@IInspectable:以前是这样,但我相信它已经过时了:@Harry:谢谢你的更正。您是否知道该API是否能够处理FAT卷,还是仅限于NTFS/ReFS?如果有人感兴趣,可以通过调用传递
FileIdInfo
文件信息类值来获得128位文件ID(Win 8,Server 2012)。64位文件ID可以通过调用获得。@IInspectable:我不知道,但我认为只有NTFS/ReFS。FAT本身没有文件ID,可用的最接近的东西是第一个集群的标识符,该标识符在碎片整理过程中会发生变化。注意:在NTFS上,您还可以通过FSCTL_ENUM_USN_数据和相关函数读取MFT来枚举文件ID。这比遍历目录树快得多,而且可能是OpenFileById()最有用的场景。(我假设ReFS有类似的机制,但我从未调查过。)@IInspectable您还拥有每个文件的NTFS,存储在主文件表中。我相信:键入0x40——指定一个ID,允许在文件名称或位置发生更改时跟踪该文件。MS-DOS不太可能与您的问题相关,除非你是双重启动。你是说Windows命令行界面吗?此外,从用户的角度来看,链接中讨论的文件ID不一定保持不变,因为许多应用程序通过删除文件并创建新文件来修改文件。从用户的角度来看,它是同一个文件,但就NTFS而言,它是一个不同的文件。