您的位置:首页 > 编程语言 > C语言/C++

[C语言]系统目录操作函数

2013-01-20 16:41 351 查看


[C语言]系统目录操作函数

7个主要函数。TempPath()获取临时文件目录;CurrentPath()获取当前工作目录;SystemPath()获取system32目录;WindowsPath()获取Windows目录;ShortPath()获取短文件名;ExePath()获取exe可执行文件目录;GetDir()获取指定文件的目录路径。

#include <stdio.h>

#include <windows.h>

/*将给定的两个字符串连接起来,并返回为一个新的字符串*/

char* StringJoin(const char* first,const char*
last)

{

char* result;

int len = strlen(first)+strlen(last)+1;

result = (char*)malloc(len*sizeof(char));

memset(result,0,len*sizeof(char));

strcpy(result,first);

strcat(result,last);

return result;

}
/*用StringJoin函数,在字符串末尾添加'\',用于目录路径*/

char* add_slash(char* string)

{

int len = strlen(string);

/*查看最后一个字符是否为'\'*/

if(string[len-1] != '\\')

return StringJoin(string,"\\");

else

return string;

}
/*获取指定字符串指定部分*/

char* StringSub(const char* string,int start,int number)

{

int len = strlen(string);

char* temp;

if(start>len)

{

printf("Start %d is too big than string length %d!\n",start,len);

return NULL;

}

if(number>(len-start))

{

printf("Number is too big!\n");

number = len - start + 1;

}

temp = (char*)malloc(sizeof(char)*(number+1));

memset(temp,0,(number+1)*sizeof(char));

int i = 0;

int j = 0;

while(i != number)

temp[i++] = string[(start-1)+j++];

temp[number]='\0';

return temp;

}

/*获取临时目录*/

char* TempPath()

{

char *Buffer;

DWORD dwRet;

/*获取临时目录*/

/*获取临时目录字符串大小,包含末尾的'\0'*/

dwRet = GetTempPath(0,NULL);

if( dwRet == 0 )

{

printf("GetCurrentDirectory failed (%d)\n", GetLastError());

return NULL;

}

/*根据获取的空间,分配内存,并置零*/

Buffer = (char *)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

/*获取临时目录*/

GetTempPath(dwRet,Buffer);

return add_slash(Buffer);

}

/*获取当前工作目录*/

char* CurrentPath()

{

char *Buffer;

DWORD dwRet;

/*获取当前目录*/

/*获取当前目录字符串大小,包含末尾的'\0'*/

dwRet = GetCurrentDirectoryA (0,NULL);

if( dwRet == 0 )

{

printf("GetCurrentDirectory failed (%d)\n", GetLastError());

return NULL;

}

/*根据获取的空间,分配内存,并置零*/

Buffer = (char *)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

/*获取临时目录*/

GetCurrentDirectoryA (dwRet,Buffer);

return add_slash(Buffer);

}

/*获取系统System32目录*/

char* SystemPath()

{

char *Buffer;

DWORD dwRet;

/*获取System目录*/

/*获取System目录字符串大小,包含末尾的'\0'*/

dwRet = GetSystemDirectoryA (NULL,0);

if( dwRet == 0 )

{

printf("GetCurrentDirectory failed (%d)\n", GetLastError());

return NULL;

}

/*根据获取的空间,分配内存,并置零*/

Buffer = (char *)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

/*获取临时目录*/

GetSystemDirectoryA (Buffer,dwRet);

return add_slash(Buffer);

}

/*获取Windows目录*/

char* WindowsPath()

{

char *Buffer;

DWORD dwRet;

/*获取Windows目录*/

/*获取Windows目录字符串大小,包含末尾的'\0'*/

dwRet = GetWindowsDirectoryA (NULL,0);

if( dwRet == 0 )

{

printf("GetCurrentDirectory failed (%d)\n", GetLastError());

return NULL;

}

/*根据获取的空间,分配内存,并置零*/

Buffer = (char *)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

/*获取临时目录*/

GetWindowsDirectoryA (Buffer,dwRet);

return add_slash(Buffer);

}

/*获取一个文件的短文件名*/

char* ShortPath(char* Path)

{

char *Buffer;

DWORD dwRet;

dwRet = GetShortPathNameA(Path,NULL,0);

if(dwRet == 0)

return NULL;

Buffer = (char*)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

GetShortPathNameA(Path,Buffer,dwRet);

return Buffer;

}

/*获取当前运行程序的目录*/

char* ExePath()

{

char *Buffer;

/**/

DWORD size=32;

DWORD dwRet=32;

Buffer = (char*)malloc(sizeof(char)*dwRet);

memset(Buffer,0,dwRet*sizeof(char));

/*获取Windows目录*/

/*获取Windows目录字符串大小,包含末尾的'\0'*/

dwRet = GetModuleFileNameA(NULL,Buffer,dwRet);

if(dwRet == 0)

return NULL;

while (size == dwRet)

{

size *= 2;

Buffer = (char*)realloc(Buffer,sizeof(char)*size);

memset(Buffer,0,size*sizeof(char));

dwRet = GetModuleFileNameA(NULL,Buffer,size);

}

return Buffer;

}

/*获取一个指定文件的目录*/

char* GetDir(const char* filepath)

{

char* pos = strrchr(filepath,'\\');

if(pos == NULL)

return NULL;

else

return StringSub(filepath,1,pos + 1 - filepath);

}

int main()

{

printf("%s\n",TempPath());

printf("%s\n",CurrentPath());

printf("%s\n",SystemPath());

printf("%s\n",WindowsPath());

printf("%s\n",ShortPath("C:\\Program
Files\\7-Zip\\readme.txt"));

printf("%s\n",ExePath());

printf("%s\n",GetDir("C:\\aaa\\bbb.exe"));

printf("%s\n",add_slash("C:\\Windows\\"));

printf("%s\n",add_slash("C:\\Windows"));

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: