Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
C++ 在Windows和C上恢复文件_C++_C_Windows - Fatal编程技术网

C++ 在Windows和C上恢复文件

C++ 在Windows和C上恢复文件,c++,c,windows,C++,C,Windows,这次我试着用C语言写一个程序,从磁盘上恢复删除的文件,它可能是一个外部磁盘,我有一个比以前在linux上使用过的想法,它是将磁盘作为一种文件打开,扫描磁盘中所有内容的页眉和文件页脚,问题是我不确定windows上是否允许将磁盘作为文件打开,基本上我有开发这个程序的逻辑,但我不确定如何在windows上实现它,任何人都可以帮我 我在linux上用于将磁盘作为文件打开的代码是: 编辑:这是我使用的一个示例,只是为了让你了解我在做什么,我使用的正确语法是: direccion = ui->lin

这次我试着用C语言写一个程序,从磁盘上恢复删除的文件,它可能是一个外部磁盘,我有一个比以前在linux上使用过的想法,它是将磁盘作为一种文件打开,扫描磁盘中所有内容的页眉和文件页脚,问题是我不确定windows上是否允许将磁盘作为文件打开,基本上我有开发这个程序的逻辑,但我不确定如何在windows上实现它,任何人都可以帮我

我在linux上用于将磁盘作为文件打开的代码是: 编辑:这是我使用的一个示例,只是为了让你了解我在做什么,我使用的正确语法是:

direccion = ui->linea->text().toLatin1().constData();
f = fopen(direccion,"rb");
我在linux上使用QtCreator,direccion变量是一个TextField值,它通过一个按钮函数打开QFileDialog,包含磁盘的文件路径

我也可以在windows中使用它吗

3.谢谢你

“我在linux上用于将磁盘作为文件打开的代码是:”

我严重怀疑您是否曾在任何linux系统(或windows)上使用过此代码。
如果反斜杠路径分隔符以任何字符串文字形式出现,则需要对其进行转义:

FILE* f = fopen("E:\\", "rb");
                // ^

另外,您为访问特定磁盘而呈现的所有文件系统路径样式都是关于访问windows文件路径/磁盘


linux文件系统没有关于驱动器字符的概念,使用的文件路径分隔符值是
'/'
,而不是
'\\'

要恢复删除的文件,不能使用
fopen
fstream::open,因为文件已删除。检查函数的返回值或测试流状态

恢复已删除文件的方法是:

  • 获取主文件表作为原始数据
  • 搜索包含类似“已删除”字符串的记录 文件名
  • 将主文件表中的条目更改为“未删除”
  • 将主文件表写回驱动器

  • 上述内容通常需要特定于平台的API,这在Linux和Windows平台上是不同的

    “我在linux上用来打开磁盘的代码…”linux,带有驱动器字符
    E:
    和未替换的反斜杠“\`路径分隔符??这听起来很奇怪,我怀疑你能提供任何正在运行的代码。使用linux主机环境。我不知道你是否能
    fopen()
    一个物理驱动器,但你可以用Win32 API函数打开它(不管它的名称如何,它可以打开多种资源,而不仅仅是文件)。@RemyLebeau:Does
    CreateFile()
    是否处理已删除的文件?问题是关于恢复已删除的文件。要恢复已删除的文件,您必须直接访问文件系统并相应地解析/更改其文件记录。并且还可以直接解析原始分区数据,这样您就可以找到已删除的文件,因为它们不再位于文件系统中(除非文件系统跟踪它们)。您可以使用
    CreateFile()
    /
    ReadFile()
    /
    WriteFile()
    来完成这些工作,但在数据量如此低的情况下,您必须非常小心。现在已经有大量的恢复工具可供使用,我不建议编写一个新的恢复工具,除非是作为学习练习。感谢您的步骤列表输入,要点是我以前从未尝试过这样的事情,所以我不确定如何做,我甚至不太会在c/c++上编程,你能帮我举一个例子或者一个关于如何获取这些数据(主文件表)的指南,这样我就可以用它作为解决我的目标的桥梁吗SuperUser@StackExchange.com
    FILE* f = fopen("E:\\", "rb");
                    // ^