C++:用CreateDirectory创建文件目录

 CreateDirectory这个函数的作用是创建一个新的目录。如果底层文件系统支持文件和目录上的安全描述,该功能可将指定的安全描述到新的目录。

函数原型:
BOOL CreateDirectory(
  LPCTSTR lpPathName,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

参数:
    pPathName:长指针,指向一个空结束的字符串,该字符串指定要创建的目录的路径。有一个默认的字符串大小限制为MAX_PATH字符的路径。此限制是关系到这个函数是如何解析路径。字符串的长度不超过MAX_PATH。

    lpSecurityAttributes:忽略,一般设置为NULL。

返回值:
    非零表示成功,零表示失败。若想获得更多的错误信息,调用GetLastError函数。

备注:
    这个函数不是递归的。它可以在一个路径中创建唯一的最终目录。也就是说,如果父目录或中间目录不存在,该函数将失败并显示错误消息ERROR_PATH_NOT_FOUND。

    一些文件系统,如NTFS文件系统,支持压缩或个别文件和目录加密。上卷格式化为这样的文件系统,一个新的目录继承父目录的压缩和加密属性。

--->>>

    从备注可知,该函数只能创建一级目录,当根目录或者中间目录不存在时,该函数将不起作用。所以假如我们要创建二级以上目录时,应该分开来一步步创建。

例如:我们要创建:D:\\一级文件夹\\二级文件夹\\...
CString str = "D:\\一级文件夹";
CreateDirectory(str, NULL);
str += "\\二级文件夹";
CreateDirectory(str, NULL);
以此类推。

在创建新的目录之前,我们也可以先判断该目录是否已经存在,例如:

CString str = "D:\\一级文件夹";
if (!PathIsDirectory(str))
{

    ::CreateDirectory(str, NULL);

}

str += "\\二级文件夹";
if (!PathIsDirectory(str))
{

    ::CreateDirectory(str, NULL);

}

在调用PathIsDirectory()函数时,需要包含以下头文件与库函数:

#include "shlwapi.h"

#pragma comment(lib,"shlwapi.lib")

emptyvoid CTemperatureDlg::OnBnClickedButtonStart()
{
	// TODO: 在此添加控件通知处理程序代码
	if(currentLab.GetLength()!=0)	
	{
		openComPort(currentLab);
		GetDlgItem(IDC_BUTTON_START)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(true);
		GetDlgItem(IDC_COMBO_COMLIST)->EnableWindow(false);

		// 创建FBG数据的文件夹
		CTime t = CTime::GetCurrentTime();
		unsigned int y = t.GetYear();						// 获取年份
		unsigned int m = t.GetMonth();						// 获取当前月份
		unsigned int d = t.GetDay();						// 获得几号
		unsigned int h = t.GetHour();						// 获取当前为几时
		unsigned int mm =t.GetMinute();						// 获取分钟
		unsigned int s = t.GetSecond();						// 获取秒
		CString foldName;
		foldName.Format(_T("FBG波长数据(%d-%02d-%02d %02d:%02d:%02d)"),y,m,d,h,mm,s);
		m_FBG_CurrentPath = m_ALL_CurrentPath + _T("\\") + foldName;
		CreateDirectory(m_FBG_CurrentPath, NULL);				// 建立文件存储根目录
//
   
   
		m_sFBG_CurrentPath = m_sALL_CurrentPath + _T("\\") + foldName;
		CreateDirectory(m_sFBG_CurrentPath, NULL);				// 建立文件存储根目录

		CString ntemp;
		for(int i=1;i<=32;i++)
		{
			ntemp.Format(_T("\\通道%d"),i);
			CreateDirectory(m_FBG_CurrentPath+ntemp, NULL);		// 建立各通道文件夹,二级文件夹!
		}
		sFBG_first = true;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在C语言中创建多级目录时,你可以使用递归的方式来实现。下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> // 递归创建多级目录 int create_directory(const char *path) { // 判断目录是否已经存在 struct stat st; if (stat(path, &st) == 0) { printf("目录 %s 已经存在\n", path); return 0; } // 创建目录 if (mkdir(path, 0777) == 0) { printf("成功创建目录 %s\n", path); return 1; } // 如果无法创建目录,则尝试创建父目录 char *parent_path = strdup(path); char *last_slash = strrchr(parent_path, '/'); if (last_slash != NULL) { *last_slash = '\0'; if (create_directory(parent_path)) { // 父目录创建成功后再次尝试创建目录 if (mkdir(path, 0777) == 0) { printf("成功创建目录 %s\n", path); free(parent_path); return 1; } } } printf("无法创建目录 %s\n", path); free(parent_path); return 0; } int main() { const char *path = "/path/to/your/directory"; if (create_directory(path)) { printf("多级目录创建成功!\n"); } else { printf("多级目录创建失败!\n"); } return 0; } ``` 这段代码中的 `create_directory` 函数使用递归的方式创建多级目录。它首先会判断目录是否已经存在,如果不存在则尝试创建目录。如果无法创建目录,则会尝试创建父目录,直到成功创建目标目录或者无法再创建更上级的父目录为止。你可以根据自己的需求修改代码中的目录路径。注意,在使用此代码时,请确保你对目录的权限设置正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值