需要在C中保存文件并将其移动到unix服务器中的不同位置

时间:2014-03-20 08:39:05

标签: c unix

我在C中有一段代码在unix服务器上。他们是删除文件的程序,但是我需要在删除之前将该文件保存到不同的位置。

/*  email the message and remove the temp email file.
*/
    sprintf(szCmd,
        "/usr/bin/mail -s\"lg_a17_srvr error\" %s < %s",
        pszSupportAddr, pszTmpMsgFile);
if (system(szCmd) != 0) {
    dce_dbgwrite(DCE_LOG_ERROR,
        "Child %d: command to email error message failed: %s", iThisChild,
        strerror(errno));
    dce_dbgwrite(DCE_LOG_ERROR, "Child %d: email command = %s", iThisChild,
        szCmd);
    dce_dbgwrite(DCE_LOG_ERROR, "Child %d: email message = <%s>",
        iThisChild, szEmailMsg);
}

**remove(pszTmpMsgFile);**

}

我需要先保存此文件 pszTmpMsgFile ,然后再将其移至不同位置。

请帮忙

1 个答案:

答案 0 :(得分:1)

你可以像这样修改代码:

if (system(szCmd) != 0) {
    char szCmd2[4096];
    snprintf(szCmd2, sizeof(szCmd2), "mv %s %s.saved", pszTmpMsgFile, pszTmpMsgFile);
    system(szCmd2);
    dce_dbgwrite(DCE_LOG_ERROR,
        "Child %d: command to email error message failed: %s", iThisChild,
        strerror(errno));
    dce_dbgwrite(DEC_LOG_ERROR,
        "Mail file saved to %s.saved", pszTmpMsgFile);

请注意,它会将文件移开(但在与之前相同的目录中),并报告文件已保存。我甚至会在邮件中的文件名后添加please remove it soon。我没有费心去测试移动是否成功 - 如果失败,没有多少人可以做。另请注意,这是一个重量级的解决方案。另一种方法是使用link()函数:

if (system(szCmd) != 0) {
    char szSaveFile[4096];
    snprintf(szSveFile, sizeof(szSaveFile), "%s.saved", pszTmpMsgFile);
    link(pszTmpMsgFile, szSaveFile);
    dce_dbgwrite(DCE_LOG_ERROR,
        "Child %d: command to email error message failed: %s", iThisChild,
        strerror(errno));
    dce_dbgwrite(DEC_LOG_ERROR,
        "Mail file saved to %s.saved", pszTmpMsgFile);

除了速度之外,这还有一个额外的好处,即不会影响删除原始文件的代码;它仍然存在,而mv命令将其删除,清理代码可能会报告问题。