目录
1 获取程序当前执行路径
/************************************************************************
功 能:获取程序当前执行路径
参 数:szCurrentAppPath - 程序当前执行路径
返回值:
************************************************************************/
void WINAPI GetCurrentPath(char* szCurrentAppPath)
{
TCHAR exeFullPath[MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
//得到程序模块名称,全路径,也就是当前运行程序的全路径
GetModuleFileName(NULL, exeFullPath, MAX_PATH); //如果是dll,则第一个参数不能为空,需要是dll句柄
//解析路径,得到当前运行程序所在目录
_splitpath(exeFullPath, drive, dir, NULL, NULL);
//得到的当前运行程序所在目录
sprintf(szCurrentAppPath, "%s%s", drive, dir);
}
2 获取程序当前执行路径的上一级目录
/************************************************************************
功 能:获取程序当前执行路径的上一级目录
参 数:szCurUpPath - 程序当前执行路径的上一级目录
返回值:
************************************************************************/
void WINAPI GetCurUpPath(char *szCurUpPath)
{
char szCurAppPath[256] = { 0 };
char exeFullPath[MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
//得到程序模块名称,全路径,也就是当前运行程序的全路径
GetModuleFileName(NULL, exeFullPath, MAX_PATH);
//解析路径,得到当前运行程序所在目录
_splitpath(exeFullPath, drive, dir, NULL, NULL);
//得到的当前运行程序所在目录
sprintf(szCurAppPath, "%s%s", drive, dir);
char szTmp[256] = { 0 };
strncpy(szTmp, szCurAppPath, strlen(szCurAppPath) - 1);
char * ext = strrchr(szTmp, '\\');
strncpy(szCurUpPath, szTmp, strlen(szTmp) - strlen(ext));
}
3 获取dll当前执行路径
/************************************************************************
功 能:获取dll当前执行路径
参 数:szCurrentPath - 程序当前执行路径
返回值:
************************************************************************/
void WINAPI GetDllPath(char *szCurrentPath)
{
/*
//方法1
HINSTANCE hInst;
...DllMain()
{
case ...:
hInst=hInstance;
}
//方法2,未验证
HMODULE hInst= GetModuleHandle(_T("mydll.dll"));
*/
char exeFullPath[MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
//得到程序模块名称,全路径,也就是当前运行程序的全路径
GetModuleFileName(hInst,exeFullPath,MAX_PATH);
//解析路径,得到当前运行程序所在目录
_splitpath(exeFullPath, drive, dir, NULL,NULL);
//得到的当前运行程序所在目录
sprintf(szCurrentPath,"%s%s",drive, dir);
}
4 获取系统临时目录路径
char *sGetTempDir (void)
{
static char sDir[256];
if (sDir[0] == 0)
{
#if _WIN32
GetTempPath(256,sDir);
#else
const char *sTmpDir = getenv("TMPDIR");
if (!sTmpDir)
sTmpDir = getenv("TEMP");
if (!sTmpDir)
sTmpDir = getenv("TMP");
if (!sTmpDir)
sTmpDir = "/tmp"; // TODO: is this the usual way in linux environments?
strcpy(sDir, sTmpDir);
#endif
}
return sDir;
}
5 添加文件夹
/************************************************************************
功 能:添加文件夹
参 数:sDirName - 输入参数,文件名
返回值:TRUE - 成功
************************************************************************/
bool WINAPI AddDirectory(TCHAR* sDirName)
{
WIN32_FIND_DATA fd; //文件夹句柄
HANDLE hFind = FindFirstFile(sDirName, &fd);
if ((hFind != INVALID_HANDLE_VALUE) &&
(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
//data目录已存在
}
else
{
CreateDirectory(sDirName, NULL);
}
FindClose(hFind);
return TRUE;
}
6 删除文件夹
/************************************************************************
功 能:删除文件夹
参 数:sDirName - 输入参数,文件名
返回值:TRUE - 成功
************************************************************************/
bool DeleteDirectory(char* sDirName)
{
CFileFind tempFind;
char sTempFileFind[200];
sprintf(sTempFileFind,"%s\\*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char sFoundFileName[200];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
if (tempFind.IsDirectory())
{
char sTempDir[200];
sprintf(sTempDir,"%s\\%s",sDirName,sFoundFileName);
DeleteDirectory(sTempDir);
}
else
{
char sTempFileName[200];
sprintf(sTempFileName,"%s\\%s",sDirName,sFoundFileName);
//修改文件属性
SetFileAttributes(sTempFileName,FILE_ATTRIBUTE_NORMAL);
//删除文件
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
7 命令行获取当前文件夹中的所有文件名及路径
dir D:\real_foreigner_1\*.* /b /s >FileNameList.txt 全路径
dir D:\real_foreigner_1\*.* /b >FileNameList.txt 文件名
8 遍历文件夹下子目录
//遍历文件夹下子目录
void WINAPI TraverseSubFolder(CString strMainFolder, CStringArray &strSubFolders, bool bFileName)
{
// strSubFolders.RemoveAll();
CString strTemp;
CFileFind fileFinder;
BOOL bIsFinded = fileFinder.FindFile(strMainFolder + _T("\\*.*"));
while (bIsFinded)
{
bIsFinded = fileFinder.FindNextFile();
if (!fileFinder.IsDots())
{
strTemp = fileFinder.GetFilePath();
if (fileFinder.IsDirectory())
{
if (bFileName == true)
{
strTemp = strTemp.Right(strTemp.GetLength() - strMainFolder.GetLength() - 1);
}
strSubFolders.Add(strTemp);
// TraverseSubFolder(strTemp);
}
}
}
fileFinder.Close();
}
9 遍历文件夹下文件
//遍历文件夹下文件
void WINAPI TraverseSubFile(CString strPath, char *filetype, CStringArray &strSubFiles)
{
// strSubFiles.RemoveAll();
CString strTemp;
CFileFind fileFinder;
BOOL bIsFinded = fileFinder.FindFile(strPath + _T("\\*.") + filetype);
while (bIsFinded)
{
bIsFinded = fileFinder.FindNextFile();
if (!fileFinder.IsDots())
{
strTemp = fileFinder.GetFilePath();
if (fileFinder.IsDirectory())
{
}
else
{
strSubFiles.Add(strTemp);
}
}
}
fileFinder.Close();
}
10 写文件
/************************************************************************
功 能:以wb方式写文件
参 数:szFileName - 文件名
buf - 数据缓存
length - 数据大小(字节数)
返回值:1 成功 0 失败
************************************************************************/
int SaveData(char* szFileName, unsigned char *iBuf, unsigned int iLen)
{
FILE *fp;
fp = fopen(szFileName, "wb");
if (!fp)
{
return -1;
}
if (fwrite(iBuf, 1, iLen, fp) != iLen)
{
fclose(fp);
return -1;
}
fclose(fp);
return 0;
}
11 读取文件大小
/************************************************************************
功 能:获取文件大小
参 数:szFileName - 文件名
返回值:文件大小(字节数)
************************************************************************/
int GetDataSize(char* szFileName)
{
FILE *fp;
fp = fopen(szFileName, "rb");
if (!fp)
{
return 0;
}
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fclose(fp);
return size;
}
12 读文件
/************************************************************************
功 能:以rb方式读文件
参 数:szFileName - 文件名
buf - 数据缓存
length - 数据大小(字节数)
返回值:0 成功 0 失败
************************************************************************/
int WINAPI ReadData(char* szFileName, unsigned char *oBuf, int iLen)
{
FILE *fp;
fp = fopen(szFileName, "rb");
if (!fp)
{
return -1;
}
fread(oBuf, 1, iLen, fp);
fclose(fp);
return 0;
}
13 拷贝文件
/************************************************************************
功 能:文件拷贝
参 数:DesFile - 目标文件名
SrcFile - 源文件名
返回值:0 成功 0 失败
************************************************************************/
int WINAPI fCopy(char* DesFile, char* SrcFile)
{
FILE *fp1, *fp2;
int i = 0;
if ((fp2 = fopen(SrcFile, "rb")) == NULL)
return 0;
if ((fp1 = fopen(DesFile, "wb")) == NULL)
{
fclose(fp2);
return -1;
}
while (!feof(fp2))
{
fputc(fgetc(fp2), fp1);
i++;
}
fclose(fp1);
fclose(fp2);
return 1;
}