C#类来取消删除文件?可能重复:如何使用C#从回收站中恢复文件?在Windows上恢复已删除的文件我正在开发一个应用程序,旨在从系统中恢复已删除的文件(回收站中的文件和已从回收站中清空但仍可理解的文件)和格式化的驱动程序。我已决定使用c#作为语言,但我无法找到解决此问题的类。有谁知道用于查找已删除文件、检索它们的任何类/方法或任何教程或帮助。我对这个问题没有什么经验,所以非常感谢任何帮助。没有内置类来完成您的请求。事实上,恢复文件是一个困难的过程,需要非常低的文件系统知识。因此,首先要做的是获取有关包含要取消删除的文件的驱动器的信息。基本上你首先需要知道它的文件系统。您必须经常使用P/Invoke。首先获取目标驱动器的语句:[DllImport("kernel32.dll",SetLastError=true)]staticexternboolCloseHandle(IntPtrhandle);[DllImport("kernel32.dll",SetLastError=true,CharSet=CharSet.Auto)]staticexternIntPtrCreateFile(stringlpFileName,uintdwDesiredAccess,uintdwShareMode,IntPtrlpSecurityAttributes,uintdwCreationDisposition,intdwFlagsAndAttributes,IntPtrhTemplateFile);[DllImport("kernel32.dll",CharSet=CharSet.Auto,SetLastError=true)]staticexternboolGetVolumeInformationByHandleW(IntPtrhDisk,StringBuildervolumeNameBuffer,intvolumeNameSize,refuintvolumeSerialNumber,refuintmaximumComponentLength,refuintfileSystemFlags,StringBuilderfileSystemNameBuffer,intnFileSystemNameSize);//获取驱动器句柄//注意:工作完成后使用CloseHandle关闭打开的句柄IntPtrhDrive=NativeMethods.CreateFile(string.Format("\\.\{0}:",DriveLetter)GenericRead,读|写,IntPtr.Zero,OpenExisting,0,内部指针。零);//然后获取一些关于驱动器的信息//下面的函数需要Vista+//使用GetVolumeInformationforoldersystemsconstintVolumeNameSize=255;constintFileSystemNameBufferSize=255;StringBuildervolumeNameBuffer=newStringBuilder(Volume;uintvolumeSerialNumber=0;uintmaximumComponentLength=0;uintfileSystemFeatures;StringBuilderfileSystemNameBuffer=newStringBuilder(FileSystemNameBufferSize);GetVolumeInformationByHandleW(hDrive,volumeNameBuffer,VolumeNameSize,refvolumeSerialNumber,refmaximumComponentLength,reffileSystemFeatures,fileSystemNameBufferSize,FileSystem);//现在你知道驱动器的文件系统//NTFS或FAT16或UDF例如stringFileSystemName=fileSystemNameBuffer.ToString();一旦你有了文件系统的名称,你就必须手动读取原始数据您将从驱动器中准确读取的内容取决于驱动器文件系统。无论如何,您必须获得物理磁盘的句柄IntPtrhDisk=CreateFile(string.Format("\\.\PhysicalDrive{0}",diskNumber),GenericRead,Read|Write,0,OpenExisting,0,IntPtr.Zero);现在,您需要了解很多文件系统部分……对于NTFS文件系统,您必须了解主文件表的概念。其实,很难。对于FAT文件系统,它没有那么复杂,但FS仍然需要一段时间来研究。从维基百科开始。从使用CreateFile的句柄,您现在可以逐字节(原始访问)逐字节(实际上是逐个扇区)读取到磁盘中,以使用ReadFile获取所需的信息。//用于读取文件[DllImport("kernel32.dll")]publicstaticexternboolReadFile(IntPtrhFile,byte[]lpBuffer,uintnNumberOfBytesToRead,refuintlpNumberOfBytesRead,IntPtrlpOverlapped);//用于设置文件中的偏移量以开始读取[DllImport("kernel32.dll")]publicstaticexternboolSetFilePointerEx(IntPtrhFile,longliDistanceToMove,reflonglpNewFilePointer,uintdwMoveMethod);//设置偏移量intbufferSize=512;byte[]buffer=newbyte[bufferSize];SetFilePointerEx(hDisk,offset,refpt,FileBegin);//读取整个扇区//请注意,您不能读取少于物理磁盘的整个扇区。通常它是512字节,//但您必须从磁盘几何结构中检索此信息。如果您有兴趣,我可以为您提供//一些代码。它需要使用IOCTL_DISK_GET_DRIVE_GEOMETRY控制代码。uint读取=0;ReadFile(hDisk,buffer,bufferSize,refread,IntPtr.Zero);对于NTFS,首先要获得MFT的起始分区…….然后您必须“解析”MFT并找到已删除的文件...我不会在这里解释整个过程,请参见此链接以获取示例。祝你好运:)现在你可能想要使用已经完成所有这些的第3方应用程序并从你自己的程序中使用它(命令行工具,如评论中所述)。以上就是C#学习教程:C#类反删除文件?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
