在實際的軟體開發項目中,經常會有實作删除過期檔案的需求。即要求程式能夠自動删除多長時間之前生成的檔案。本文提供了一個示例代碼,為相關的開發工作提供了參考。
程式如下(本程式用makefile進行編譯):
/**********************************************************************
* 版權所有 (C)2014, Zhou Zhaoxiong。
*
* 檔案名稱: TestFileDelete.c
* 内容摘要: 用于示範Linux下過期檔案的删除
* 其它說明: 無
* 目前版本: V1.0
* 作 者: Zhou Zhaoxiong
* 完成日期: 20140811
* 版本 修改時間 修改人 修改内容
********************************************************************
* V1.0 20140811 周兆熊 建立
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 資料類型
typedef unsigned char UINT8;
typedef unsigned int UINT32;
typedef signed int INT32;
/*---------------------------------------------------------------
* 功能描述: 主函數
* 輸入參數: 無
* 輸出參數: 無
* 返 回 值: 0-執行結束
* 其他說明: 無
* 修改日期 版本号 修改人 修改内容
* ---------------------------------------------------------------
* 20140811 V1.0 Zhou Zhaoxiong 建立
-----------------------------------------------------------------*/
INT32 main()
{
UINT8 szCmdBuf[1024] = {0}; // 用于存放Linux指令
UINT8 szLocalFileSaveDir[1000] = {0}; // 用于存放本地目錄
UINT32 iFileSaveDays = 10; // 檔案保留天數, 可由配置項決定, 這裡設為0
memcpy(szLocalFileSaveDir, "/home/zhouzx/TestDir", strlen("/home/zhouzx/TestDir")); // 檔案的存放路徑
// 注意該删除指令的格式
snprintf(szCmdBuf, sizeof(szCmdBuf) - 1, "find %s -name \"*.txt\" -ctime +%d -exec rm -f {} \\;", szLocalFileSaveDir, iFileSaveDays);
printf("Delete the file(s), exec: %s\n", szCmdBuf);
system(szCmdBuf); // 執行删除指令
return 0;
}
makefile檔案内容如下:
TestFileDelete : TestFileDelete.c
gcc -c -g TestFileDelete.c
gcc -g -o release/TestFileDelete TestFileDelete.o
rm *.o
說明:
(1) 本文中的保留天數和檔案存放目錄都可以通過配置檔案中的配置項來決定,這樣可根據需要來靈活配置。
(2) 要嚴格按照“find”指令的文法來書寫代碼,否則該指令不起作用。有關該指令的具體文法規則,請上網查詢。
(本人微網誌:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,歡迎關注!)