【问题标题】:Delete .txt file when program closes/exits (X Button)程序关闭/退出时删除 .txt 文件(X 按钮)
【发布时间】:2013-06-01 04:48:15
【问题描述】:

我有一个程序会在与编译的 .exe 相同的目录中创建一个简单的 txt 文件:

ofstream output("myfile.txt", ios::binary | ios::trunc);

在我的程序结束时,我要删除它:

remove("myfile.txt");

这两种方法都很好,但是,如果用户意外关闭 cmd 窗口,或者他们结束了进程,我希望删除文件。

【问题讨论】:

  • 可能值得开始一个不同的过程来观察这个过程的结束。
  • 有趣...你能详细说明或举一个简单的例子吗? :)
  • 在哪个操作系统上?你不能让那个输出文件成为一个临时文件(例如tmpfile(3),至少在 Linux、MacOSX 和其他 POSIX 系统上)?
  • Window 7。考虑到我有一个完全独立的 exe 也使用这个 txt,我不这么认为。我希望它写入用户系统,然后在程序关闭时删除(可能在崩溃时捕获它???)
  • 嗯,使用WinExecShellExecuteCreateProcess 很容易创建。据我所知,制作一个强大的崩溃观察者并不是一件容易的事。当然还有更糟糕的方法更容易,比如每隔几秒检查一次它是否还活着。

标签: c++ file-io exit temporary


【解决方案1】:

清理进程的标准方法是使用atexit 注册一个函数。

void clean_myfile {
    std::remove( "myfile.txt" );
}

int main() {
    std::ofstream output("myfile.txt", std::ios::binary | std::ios::trunc);
    std::atexit( clean_myfile );
}

如果进程正常退出,这将运行,尽管有平台细节。

【讨论】:

  • 这很好用!我必须在函数声明之后添加 () 但是当我关闭窗口时它可以工作:)
  • 我希望 SO 上的更多人给出这样简单的答案 :)
  • 请注意atexit注册的处理程序clean_myfile如果你的程序被杀死,例如,将不会运行。由于一些分段违规......正如Potatoswatter回答的那样,它只会在进程退出时运行优雅......
猜你喜欢
  • 1970-01-01
  • 2016-08-31
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2011-08-26
相关资源
最近更新 更多