日志源代码,删除指定路径所有文件夹名,并创建新的日志文件
2016-10-28 09:48
627 查看
#include "stdafx.h"
#pragma warning( disable : 4786) // Disable warning messages
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <windows.h>
#include "shlwapi.h"
#include "PComm.h"
#include "CommTools.h"
#include <Shlwapi.h>
#include <fstream.h>
#include <iostream>
#include <vector>
using namespace std;
/*****************************************************************************
* 函 数 名 : GetCurrentDirFileFolder
* 负 责 人 : guoyoung 1110930
* 创建日期 : 2016年10月21日
* 函数功能 : 获取给定路径下的所有文件夹名
* 输入参数 : string path 指定的路径
* 输出参数 : vector<string>& files 当前路径下的文件夹名
* 返 回 值 : int
*****************************************************************************/
static int GetCurrentDirFileFolder(string path, vector<string>& files)
{
long hFile = 0;
struct _finddata_t fileinfo;
string p;
hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo);
if (-1 != hFile)
{
do
{
if (fileinfo.attrib & _A_SUBDIR)
{
if ((0 != strcmp(fileinfo.name, "."))
&& (0 != strcmp(fileinfo.name, "..")))
{
files.push_back(fileinfo.name);
}
}
}while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
return 0;
}
//创建日志文件和删除N个月前的日志文件夹。
void CLogfile::CreateFileOrDeleteFile(char *LogFile, struct tm **tim, FILE **fp)
{
long i=0;
char SubDirName[MAX_NAME] = {0};
char tmpStr[MAX_NAME] = {0};
char logPath[MAX_PATH];
char DateDirName[MAX_NAME] = {0};
vector<string> files;
vector<string> Dayfiles;
int size = 0;
unsigned int ThrdValue = 0;
unsigned int TargetValue = 0;
char YearMonthFileName[12] = {0};
char YearMonthfilePath[MAX_NAME] = {0};
char DayfilePath[MAX_NAME] = {0};
memset(SubDirName, 0x0, sizeof(SubDirName));
memset(tmpStr, 0x0, sizeof(tmpStr));
memset(logPath, 0x0, sizeof(logPath));
//strcpy(logPath, "C:\\GWI_log");
strcpy(logPath, g_logRootDir);
time(&i);
*tim=localtime(&i);
strcpy(SubDirName, logPath);
if (!FolderExist(SubDirName))
{
CreateDirectory(SubDirName, NULL);
}
sprintf(SubDirName,"%s\\%04d%02d", logPath, (*tim)->tm_year+1900, (*tim)->tm_mon+1);
if (!FolderExist(SubDirName)) //if (!PathFileExists(SubDirName))
{
//按照年月时间删除历史日志文件
if((*tim)->tm_mon < g_loglastmonthnum)
{
sprintf(YearMonthFileName,"%04d%02d", (*tim)->tm_year+1900-1, (*tim)->tm_mon+1-g_loglastmonthnum+12);
}
else
{
sprintf(YearMonthFileName,"%04d%02d", (*tim)->tm_year+1900, (*tim)->tm_mon+1-g_loglastmonthnum);
}
//modify by guoyong 1110930 2016-09-19, when log file last month is 0, it means the log file is not removed permanently.
if (0 != g_loglastmonthnum)
{
ThrdValue = strtoul(YearMonthFileName, '\0', 10);
/* 获取日志路径下 C:\GWI_log\所有年月文件夹, 如文件夹201604 */
GetCurrentDirFileFolder(logPath, files);
size = files.size();
for (int i = 0; i < size; i++)
{
const char *CurrentFileName = files[i].c_str();
TargetValue = strtoul(CurrentFileName,'\0', 10);
if ((TargetValue != 0)
&& (TargetValue <= ThrdValue))
{
strcpy(YearMonthfilePath, logPath);
strcat(YearMonthfilePath, "\\");
strcat(YearMonthfilePath, CurrentFileName);
strcpy(tmpStr, YearMonthfilePath);
/* 获取日志路径下 C:\GWI_log\201604\所有日期文件夹 */
GetCurrentDirFileFolder(YearMonthfilePath, Dayfiles);
int iDaysize = Dayfiles.size();
for (int j = 0; j < iDaysize; j++)
{
const char *DayFileName = Dayfiles[j].c_str();
strcpy(DayfilePath, YearMonthfilePath);
strcat(DayfilePath, "\\");
strcat(DayfilePath, DayFileName);
DeleteDirectory(DayfilePath);
memset(DayfilePath, 0x0, sizeof(DayfilePath));
}
DeleteDirectory(tmpStr);
memset(YearMonthfilePath, 0x0, sizeof(YearMonthfilePath));
memset(tmpStr, 0x0, sizeof(tmpStr));
}
}
}
CreateDirectory(SubDirName, NULL);
}
sprintf(DateDirName,"%s\\%04d%02d\\%2d", logPath, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
if (!FolderExist(DateDirName))
{
CreateDirectory(DateDirName, NULL);
}
memset(m_filename, 0x0, sizeof(m_filename));
char *pp = strrchr(LogFile, '\\');
if( pp )
{
sprintf(m_filename, "%s\\%s_%04d%02d%02d.log", DateDirName, pp+1, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
}
else
{
sprintf(m_filename, "%s\\%s_%04d%02d%02d.log", DateDirName, LogFile, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
}
*fp=fopen(m_filename, "at");
}
#pragma warning( disable : 4786) // Disable warning messages
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <windows.h>
#include "shlwapi.h"
#include "PComm.h"
#include "CommTools.h"
#include <Shlwapi.h>
#include <fstream.h>
#include <iostream>
#include <vector>
using namespace std;
/*****************************************************************************
* 函 数 名 : GetCurrentDirFileFolder
* 负 责 人 : guoyoung 1110930
* 创建日期 : 2016年10月21日
* 函数功能 : 获取给定路径下的所有文件夹名
* 输入参数 : string path 指定的路径
* 输出参数 : vector<string>& files 当前路径下的文件夹名
* 返 回 值 : int
*****************************************************************************/
static int GetCurrentDirFileFolder(string path, vector<string>& files)
{
long hFile = 0;
struct _finddata_t fileinfo;
string p;
hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo);
if (-1 != hFile)
{
do
{
if (fileinfo.attrib & _A_SUBDIR)
{
if ((0 != strcmp(fileinfo.name, "."))
&& (0 != strcmp(fileinfo.name, "..")))
{
files.push_back(fileinfo.name);
}
}
}while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
return 0;
}
//创建日志文件和删除N个月前的日志文件夹。
void CLogfile::CreateFileOrDeleteFile(char *LogFile, struct tm **tim, FILE **fp)
{
long i=0;
char SubDirName[MAX_NAME] = {0};
char tmpStr[MAX_NAME] = {0};
char logPath[MAX_PATH];
char DateDirName[MAX_NAME] = {0};
vector<string> files;
vector<string> Dayfiles;
int size = 0;
unsigned int ThrdValue = 0;
unsigned int TargetValue = 0;
char YearMonthFileName[12] = {0};
char YearMonthfilePath[MAX_NAME] = {0};
char DayfilePath[MAX_NAME] = {0};
memset(SubDirName, 0x0, sizeof(SubDirName));
memset(tmpStr, 0x0, sizeof(tmpStr));
memset(logPath, 0x0, sizeof(logPath));
//strcpy(logPath, "C:\\GWI_log");
strcpy(logPath, g_logRootDir);
time(&i);
*tim=localtime(&i);
strcpy(SubDirName, logPath);
if (!FolderExist(SubDirName))
{
CreateDirectory(SubDirName, NULL);
}
sprintf(SubDirName,"%s\\%04d%02d", logPath, (*tim)->tm_year+1900, (*tim)->tm_mon+1);
if (!FolderExist(SubDirName)) //if (!PathFileExists(SubDirName))
{
//按照年月时间删除历史日志文件
if((*tim)->tm_mon < g_loglastmonthnum)
{
sprintf(YearMonthFileName,"%04d%02d", (*tim)->tm_year+1900-1, (*tim)->tm_mon+1-g_loglastmonthnum+12);
}
else
{
sprintf(YearMonthFileName,"%04d%02d", (*tim)->tm_year+1900, (*tim)->tm_mon+1-g_loglastmonthnum);
}
//modify by guoyong 1110930 2016-09-19, when log file last month is 0, it means the log file is not removed permanently.
if (0 != g_loglastmonthnum)
{
ThrdValue = strtoul(YearMonthFileName, '\0', 10);
/* 获取日志路径下 C:\GWI_log\所有年月文件夹, 如文件夹201604 */
GetCurrentDirFileFolder(logPath, files);
size = files.size();
for (int i = 0; i < size; i++)
{
const char *CurrentFileName = files[i].c_str();
TargetValue = strtoul(CurrentFileName,'\0', 10);
if ((TargetValue != 0)
&& (TargetValue <= ThrdValue))
{
strcpy(YearMonthfilePath, logPath);
strcat(YearMonthfilePath, "\\");
strcat(YearMonthfilePath, CurrentFileName);
strcpy(tmpStr, YearMonthfilePath);
/* 获取日志路径下 C:\GWI_log\201604\所有日期文件夹 */
GetCurrentDirFileFolder(YearMonthfilePath, Dayfiles);
int iDaysize = Dayfiles.size();
for (int j = 0; j < iDaysize; j++)
{
const char *DayFileName = Dayfiles[j].c_str();
strcpy(DayfilePath, YearMonthfilePath);
strcat(DayfilePath, "\\");
strcat(DayfilePath, DayFileName);
DeleteDirectory(DayfilePath);
memset(DayfilePath, 0x0, sizeof(DayfilePath));
}
DeleteDirectory(tmpStr);
memset(YearMonthfilePath, 0x0, sizeof(YearMonthfilePath));
memset(tmpStr, 0x0, sizeof(tmpStr));
}
}
}
CreateDirectory(SubDirName, NULL);
}
sprintf(DateDirName,"%s\\%04d%02d\\%2d", logPath, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
if (!FolderExist(DateDirName))
{
CreateDirectory(DateDirName, NULL);
}
memset(m_filename, 0x0, sizeof(m_filename));
char *pp = strrchr(LogFile, '\\');
if( pp )
{
sprintf(m_filename, "%s\\%s_%04d%02d%02d.log", DateDirName, pp+1, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
}
else
{
sprintf(m_filename, "%s\\%s_%04d%02d%02d.log", DateDirName, LogFile, (*tim)->tm_year+1900, (*tim)->tm_mon+1, (*tim)->tm_mday);
}
*fp=fopen(m_filename, "at");
}
相关文章推荐
- 删除指定文件路径下的所有文件及文件夹
- python3.6深度学习图片集处理项目源代码(为cnn等准备图片集合,批量生成、删除、改名、旋转、调整图片大小,包括删除指定路径下所有文件)
- java删除指定路径下所有的文件, 及该文件夹里的所有文件夹,不包括该文件夹
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- Java删除指定路径下所有文件和文件夹
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- 删除指定文件夹内创建时间24小时之外的所有文件
- sql 恢复指定文件夹下的所有日志文件。
- 获取指定路径下文件夹所有文件的大小
- C#.net获取指定文件夹下的所有jpg文件,并按文件创建时间排序
- 删除指定文件夹下所有文件(包括子文件夹及子文件夹下的所有文件)
- 在指定路径创建文件夹, 获取EXE文件的当前目录
- 用命令行删除指定文件夹下面的所有文件(如果里面没有子文件夹)
- 删除文件夹(非空目录)及其中所有文件的思路及源代码
- C# 删除、遍历指定目录下的所有指定文件、文件夹
- 删除指定时间前目录下生成的所有文件、文件夹
- wince在指定的路径下 打开,读,创建,写,删除txt文件
- C# 删除指定目录下的 所有指定文件、文件夹
- C#.net获取指定文件夹下的所有jpg文件,并按文件创建时间排序
- VC遍历指定文件夹下的所有文件 及如何删除文件夹