我用编译覆盖了我的.c文件。我能把它拿回来吗?

时间:2015-05-19 04:44:43

标签: c unix

我正在做一个学校项目。不幸的是,我只是运行了这样的编译:gcc -o file.c file.o

我忘了输出输出的可执行文件名,现在我以前的C文件已经不见了。有没有办法让这个文件回来?我写了很多代码已经消失了。

程序是在C语言的Unix服务器上编写的。

谢谢!

3 个答案:

答案 0 :(得分:4)

  

有没有办法让这个文件恢复?

如果您使用版本控制系统或进行备份。如果没有,你可能会失去运气。

答案 1 :(得分:1)

如果您的编辑器保存了临时文件,它们可能仍然在那里。在unix下,文件本身就消失了。很快就会出现这个问题,因为它超出了StackOverflow的范围。

我认为(正如Caleb在我输入的时候观察到的那样)你学会了使用源代码控制和定期检查的众多好理由之一。

以下是将错误代码编译到错误文件中时会发生的情况:

~ mgregory$ cat > foo.h
bad code
~ mgregory$ cat > foo.c
test text
~ mgregory$ gcc -o foo.c foo.h
foo.h:1:1: error: unknown type name 'bad'
bad code
^
foo.h:1:9: error: expected ';' after top level declarator
bad code
        ^
        ;
2 errors generated.
~ mgregory$ ls -l foo.c
ls: foo.c: No such file or directory
~ mgregory$ 

答案 2 :(得分:1)

通常无法取回文件(但详细信息操作系统非常痛苦并且file system具体;如果在Linux笔记本电脑上的Ext4文件系统上,您可以尝试e2fsprogs debugfs })。你显然有备份,所以使用它们(如果你不这样做,你会痛苦地学到一些重要的东西,我们大多数人在生命的早期阶段都犯了同样的错误,所以不要太羞耻)。

现在是时候了解version control系统是什么了。请阅读git并学会使用它。

如果您的软件使用free software许可,您甚至可以使用http://github.com/(或其他类似http://gitlab.com/)作为存储库。

您可以运行file file.cls -l file.c以及stat file.c来了解file.c内的内容。您可以使用ls -alst

列出最近修改过的文件

顺便说一下,你应该用

编译你的程序
gcc -Wall -Wextra -g file.c -o prog

这会向-Wall请求所有警告,其中更多警告使用-Wextra,使用-g调试信息。然后,您可以将gdb调试程序用作gdb prog

顺便说一句,您可能希望MakefileGNU make,只需键入make即可编译您的程序。 HereMakefile的一个简单示例。

请注意,最近的 GCC能够处理pre-compiled headers(但它不是一个对小型学校项目非常有用的功能)。如果您输入gcc -o file.c file.h,则您的标题文件file.h可能已预编译为file.c