创建多级目录

[cpp]

1. void CreateFolder(char *FilePath)  
2. {  
3. char FilePath2[MAX_PATH]="";   
4. for (int i =0; i< MAX_PATH; i++)  
5.     {  
6. if (FilePath[i] =='\\'||FilePath[i] =='/')  
7.         {  
8.           
9. DWORD dwAttr=GetFileAttributes(FilePath2);    
10. if(dwAttr==0xFFFFFFFF)  //目录不存在则创建     
11.                  CreateDirectory(FilePath2,NULL);  
12.         }  
13.         FilePath2[i] = FilePath[i];  
14.           
15.     }  
16.   
17. }

 

新建目录CreateDirectory

第一个参数值为文件夹名称,第二个参数值为安全属性,一般设置为NULL即可。如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。

  特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹。

  当希望创建含有子文件夹的文件夹时,可以先使用该函数创建一级文件夹,然后再使用该函数在一级文件夹下创建子文件夹。如:

  希望创建:d:\\TEST\\temp,

  则:CString str = “d:\\TEST”;

  CreateDirectory(str, NULL);

  str = str + \\temp;

  CreateDirectory(str, NULL);

[cpp]

1. CString szDir;  
2. szDir="C:\\temp";//临时文件夹  
3. DWORD dwAttr=GetFileAttributes(szDir);  
4. if(dwAttr==0xFFFFFFFF)  //临时文件夹不存在则创建  
5. {  
6.     CreateDirectory(szDir,NULL);  
7. )  
8. //.........chuli  
9. RemoveDirectory(szDir);//删除文件夹

得到运行程序所在路径全路径(exe或其他模块文件名称,程序目录):GetModuleFileName。

函数原型:

DWORD GetModuleFileName( 
 

 
  HMODULE hModule, 
 

 
  LPTSTR lpFilename, 
 

 
  DWORD nSize 
 

 
  );

  函数参数说明:

  hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。

  lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数

  nSize DWORD ,装载到缓冲区lpFileName的最大值

  函数返回值:

  如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所设的nSize过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。

  如果函数失败,返回值将为0,利用GetLastError可获得异常代码。

  需要的头文件为:

  windows.h

  

[cpp]

1. #include <windows.h>  
2.   #include <stdio.h>  
3. BOOL CreateSampleService()  
4.   {  
5. TCHAR szPath[MAX_PATH];  
6. if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )  
7.   {  
8. "GetModuleFileName failed (%d)\n", GetLastError());  
9. return FALSE;  
10.   }  
11. return TRUE;  
12.   }

[cpp]

1. <h1><a name="t3"></a>获取程序当前路径GetCurrentDirectory(当前进程的当前路径,即程序实例目录,会随着操作的改变而改变)</h1>DWORD GetCurrentDirectory(  
2. DWORD nBufferLength, // size of directory buffer  
3. LPTSTR lpBuffer // directory buffer  
4.   );

  函数功能

  获取当前进程的当前目录

  参数说明

  参数 类型及说明

  nBufferLength 缓冲区的长度

  lpBuffer 指定一个预定义字串,用于装载当前目录

  返回值

  调用成功 返回装载到lpBuffer的字节数。

  如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度),其中包括空中止字符。零表示失败。使用GetLastError函数可获得错误信息

CFileDialog设置打开默认路径dlg.m_ofn.lpstrInitialDir="D:\\Program File";

谨记:CFileDialog会改变程序的默认执行路径,比较稳妥的办法还是绝对路径来访问文件比较好。在程序刚一跑起来的时候,先用GetCurrentDirectory()或是GetModuleFileName()获得当前可执行文件所在的路径,并保存起来。以后即使是用CFileDialog改变了当前的路径,也能很容易地找回来。

[cpp]

1. CFileDialog Dlg(TRUE,NULL,NULL,0,"ASCII Data Files(*.asc)|*.asc|所有文件 (*.*)|*.*||");  
2. char pBuf[MAX_PATH];                                 //存放路径的变量         
3.       
4. //获取程序的当前目录  
5.       
6. "\\");  
7.       
8.     CString strtemp=pBuf;  
9.       
10.   
11.     Dlg.m_ofn.lpstrInitialDir=pBuf;