-
2013-04-12 18:34:21http://baike.baidu.com/view/1295803.htm更多相关内容
-
CreateDirectory GetCurrentDirectory 和SetCurrentDirectory
2021-01-09 20:50:32第二个参数 返回值 代码实现 SetCurrentDirectory 函数功能 函数声明 第一个参数: 返回值: 注意: 代码实现 `CreateDirectory`和`SetCurrentDirectory`相结合使用(打了一套组合拳):实现代码下: CreateDirectory...文章目录
CreateDirectory
函数功能
创建一个新目录
函数声明
BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes );
第一个参数(第一种情况绝对路径)
lpNewDirectory
String,新目录的名字。举例:LPCSTR str = "c:\\TEST"
第一个参数(第二种情况当前目录)
lpNewDirectory
String,新目录的名字。举例:LPCSTR str = "TEST"
第二个参数
lpSecurityAttributes
SECURITY_ATTRIBUTES,这个结构定义了目录的安全特性——如果操作系统支持的话,安全属性,一般设置为NULL
即可返回值
Long,如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。会设置
GetLastError
注意:
特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹。
当希望创建含有子文件夹的文件夹时,可以
先使用该函数创建一级文件夹
,然后再使用该函数在一级文件夹下创建子文件夹
。如:希望创建:
d:\\TEST\\temp
则:
LPCSTR str = "c:\\TEST"; CreateDirectory(str, NULL); LPCSTR std = "c:\\TEST\\temp"; CreateDirectory(std, NULL);
代码实现
绝对路径
LPTSTR szDirPath = LPTSTR("c:\\dog"); if (!CreateDirectory(szDirPath, NULL)) { LPCSTR a = "创建失败"; LPCSTR b = "再接再厉"; MessageBox(NULL,a,b,MB_OK); return 0; } LPCSTR a = "创建成功"; LPCSTR b = "厉害"; MessageBox(NULL, a, b, MB_OK); LPCSTR str = "c:\\TEST"; CreateDirectory(str, NULL); LPCSTR std = "c:\\TEST\\temp"; CreateDirectory(std, NULL);
当前目录
LPCSTR str1 = "TEST"; CreateDirectory(str1, NULL); if (!CreateDirectory(szDirPath, NULL)) { LPCSTR a = "创建失败"; LPCSTR b = "再接再厉"; MessageBox(NULL, a, b, MB_OK); return 0; } LPCSTR a = "在当前目录创建成功"; LPCSTR b = "厉害"; MessageBox(NULL, a, b, MB_OK);
GetCurrentDirectory
函数功能
在一个缓冲区中装载当前目录
函数声明
因为此时我是用的是多字节字符集,所以
GetCurrentDirectory
自动转变为GetCurrentDirectoryA
GetCurrentDirectoryA( _In_ DWORD nBufferLength, _Out_writes_to_opt_(nBufferLength,return + 1) LPSTR lpBuffer );
第一个参数
nBufferLength Long
,lpBuffer
缓冲区的长度第二个参数
lpBuffer String
,指定一个预定义字串,用于装载当前目录返回值
Long
,装载到lpBuffer
的字节数。如nBufferLength
的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度),其中包括空中止字符。零表示失败。会设置GetLastError
代码实现
TCHAR szCurrentDirectory[MAX_PATH]; DWORD dwCurDirPathlen; dwCurDirPathlen=GetCurrentDirectory(MAX_PATH, szCurrentDirectory); printf("%d", dwCurDirPathlen); if (dwCurDirPathlen == 0) { LPCSTR a = "获取当前目录失败"; LPCSTR b = "再接再厉"; MessageBox(NULL, a, b, MB_OK); return 0; } LPCSTR a = "获取当前目录成功"; LPCSTR b = "厉害"; MessageBox(NULL, szCurrentDirectory, b, MB_OK);
SetCurrentDirectory
函数功能
在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,这就需要使用函数
GetCurrentDirectory
获取当前进程所有在的目录。同时也可以使用setcurrentdirectory
函数来改变进程的当前目录。函数声明
SetCurrentDirectoryA( _In_ LPCSTR lpPathName );
第一个参数:
LPCTSTR lpPathName
程序的目录设置到地址返回值:
此函数的返回值类型为Long,非零表示成功,零表示失败。会设置
GetLastError
注意:
应用程序终止时,工作目录被还原为其原始位置(从其开始进程的目录)。
允许 path 参数指定相对或绝对路径信息。 相对路径信息被解释为相对于当前工作目录。 若要获取当前工作目录,请参见
GetCurrentDirectory
。尾随空格从 path 参数的结尾。CONFIG 目录中的已取消。
path 参数不区分大小写。
如果您要将目录设置为装有可移动媒体的驱动器(例如对于软盘驱动器,为“A:”,对于 CD-ROM 驱动器,为“E:”),则可以通过使用
IsReady
属性确定该驱动器是否已就绪。代码实现
LPCSTR a = "c:\\"; if (!SetCurrentDirectory(a)) { LPCSTR a = "设置当前目录失败"; LPCSTR b = "再接再厉"; MessageBox(NULL, a, b, MB_OK); } LPCSTR a1 = "设置当前目录成功"; LPCSTR b = "厉害"; MessageBox(NULL, a1, b, MB_OK);
CreateDirectory
和SetCurrentDirectory
相结合使用(打了一套组合拳):实现代码下:LPCSTR CurrentDirectory = "c:\\"; if (!SetCurrentDirectory(CurrentDirectory)) { LPCSTR a = "设置当前目录失败"; LPCSTR b = "再接再厉"; MessageBox(NULL, a, b, MB_OK); } LPCSTR CurrentDirectory1 = "设置当前目录成功"; LPCSTR CurrentDirectoryTable = "厉害"; MessageBox(NULL, CurrentDirectory1, CurrentDirectoryTable, MB_OK); LPCSTR str1 = "TEST"; if (!CreateDirectory(str1, NULL)) { LPCSTR a = "创建失败"; LPCSTR b = "再接再厉"; MessageBox(NULL, a, b, MB_OK); return 0; } LPCSTR createDirectory = "在当前目录创建成功"; LPCSTR b = "厉害"; MessageBox(NULL, createDirectory, b, MB_OK);
备注:
2021年坚持学写博客第10天(学习两个windows API) 寻梦SS明日目标:
windows核心编程API函数 -
SetCurrentDirectory 导致的崩溃问题
2020-02-28 10:40:06本质原因是::SetCurrentDirectory的路径是有问题的; 采用如下的方法:分解路径,在设置当前路径,才可以; strConfigFile.assign(szModuleFileName); strConfigFile = strConfigFile.substr(0, ...1.程序设置成开机启动,通过注册表启动,导致程序崩溃;
分析是日志这块出问题了:
分析:是log4cppLIB库中,FileAppender 打开相对路径的日志文件,失败导致的。写文件的时候程序崩溃的问题;原因:
std::string strConfigFile;
std::string strLogPath;
TCHAR szModuleFileName[BUFSIZE] = { 0 };
TCHAR szCurrentDir[BUFSIZE] = { 0 };
::GetModuleFileName(NULL, szModuleFileName, 1024);
::PathRemoveExtension(szModuleFileName); //
::SetCurrentDirectory(szModuleFileName);::GetCurrentDirectory(BUFSIZE, szCurrentDir);
获取的GetCurrentDirectory路径是:C:\Windows\System32 路径,不是程序的路径导致的;
本质原因是::SetCurrentDirectory的路径是有问题的;采用如下的方法:分解路径,在设置当前路径,才可以;
strConfigFile.assign(szModuleFileName);
strConfigFile = strConfigFile.substr(0, strConfigFile.find_last_of('\\')); -
4. GetCurrentDirectory函数 SetCurrentDirectory函数
2019-09-04 23:04:19GetCurrentDirectory函数 SetCurrentDirectory函数 原文链接:https://blog.csdn.net/foreverhuylee/article/details/22082311 SetCurrentDirectory: 切换当前进程的当前工作目录。 什么情形下会有这种进程的切换...GetCurrentDirectory函数 SetCurrentDirectory函数
原文链接:https://blog.csdn.net/foreverhuylee/article/details/22082311SetCurrentDirectory: 切换当前进程的当前工作目录。
什么情形下会有这种进程的切换?情形1 解决使用CFileDialog造成的访问相对路径文件出错
现象:程序中使用CFileDialog选择一个文件后,无法访问相对路径下的文件,Debug没有出错,EXE启动出错!
原因:CFileDialog通过DoModal() == IDOK后,会造成当前程序的路径的改变,所以无法访问。
解决:在调用CFileDialog DoModal前先使用GetCurrentDirectory()保存当前路径,调用DoModal()后使用SetCurrentDirectory()重新设定当前目录即可。
情形2 LoadLibrary失败。
http://blog.csdn.net/woyaowenzi/article/details/4332187
情形3 LoadLibrary加载动态库失败的解决办法.
方式一 采用LoadLibraryEx
若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。
但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx:LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通过指定LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。
方式二 采用SetCurrentDir
跨目录调用dll,你应该这样
1 用GetCurrentDir保存当前的工作目录
2 用SetCurrentDir将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢复到原来的工作路径TCHAR chCurDir[MAX_PATH] = {0}; GetCurrentDirectory(MAX_PATH, chCurDir); SetCurrentDirectory(_T("E:\\test\\")); m_hDLL = LoadLibrary(_T("MyTest.dll")); SetCurrentDirectory(chCurDir);
-
GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName
2017-11-16 14:23:28SetCurrentDirectory(chCurDir); 总结:dll的加载顺序: (1)EXE所在目录; (2)当前目录GetCurrentDirectory(); (3)系统目录GetSystemDirectory(); (4)WINDOWS目录... -
C++ 获取程序所在路径GetModuleFileName,并设置为当前路径SetCurrentDirectory
2020-09-09 10:51:52#include "stdafx.h" #include #include #include int main() { TCHAR TPath[MAX_PATH]; DWORD dwRet; dwRet = GetModuleFileName(NULL, TPath, MAX_PATH);... SetCurrentDirectory(A2W(strPath.c_str())); } -
SetCurrentDirectory的用法
2016-06-12 14:58:32SetCurrentDirectory切换当前进程的当前工作目录。 设置当前路径,然后就可以以相对路径访问一些你程序相关的文件,不需要绝对路径 code: TCHAR chCurDir[MAX_PATH] = {0}; GetCurrentDirectory(MAX_PATH, ... -
关于程序工作路径问问题setcurrentdirectory
2016-09-27 15:47:32BOOL SetCurrentDirectory( LPCTSTR lpPathName ); 函数是设置当前路径,函数的返回值如果是0,表示设置失败,如果不是0,表示设置成功; GetModuleFileName函数原型 DWORD GetModuleFileName( ... -
CFtpConnection之CreateDirectory、GetCurrentDirectory、SetCurrentDirectory的使用
2017-06-15 16:42:03FTP站点目录是C:\\Data,...使用CreateDirectory、GetCurrentDirectory、SetCurrentDirectory函数就可以很好的实现。一下省略掉FTP其它的一些连接操作: 方法一: CString strFtpPath,strUP; pFtpConnection->GetC -
程序加载独立目录下的dll(loadlibraryex,setdlldirectory,setcurrentdirectory用法)
2018-12-28 17:35:533. setcurrentdirectory, 修改程序的工作目录。 三种方法各显神通地解决了这个问题,但解决的方法各有不同,下面说说各自的特点和注意事项。 第一种方法,个人首推的一种方法,特点是可以不需要调用额外的... -
C/C++ 获取当前进程工作目录GetCurrentDirectory()以及设置当前进程的工作目录SetCurrentDirectory()
2021-01-09 11:33:19SetCurrentDirectory()切换当前进程的当前工作目录。 头文件:#include<Windows.h> 函数原型: DWORDGetCurrentDirectory( DWORDnBufferLength, // size of directory buffer 缓冲区的长度 LPTSTRlpBuffer ... -
Windows API一日一练(52)GetCurrentDirectory和SetCurrentDirectory函数
2019-09-25 00:42:28在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的...同时也可以使用SetCurrentDirectory函数来改变进程的当前目录。 函数GetCurrentDirectory和SetCurrentDirectory声明如下: ... -
windows API 第 11 篇 GetCurrentDirectory SetCurrentDirectory
2019-10-02 13:53:00BOOL SetCurrentDirectory( LPCTSTR lpPathName // new directory name ); 举例说明: char szDir1[MAX_PATH] = { 0 }; DWORD dwLen1 = GetCurrentDirectoryA (MAX_PATH, szDir1); WCHAR *pDir2 = ... -
GetCurrentDirectory和SetCurrentDirectory函数
2013-03-04 11:25:00在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,这就需要使用函数...同时也可以使用SetCurrentDirectory函数来改变进程的 -
GetCurrentDirectory,SetCurrentDirectory
2015-07-09 18:40:53在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行...同时也可以使用SetCurrentDirectory函数来改变进程的当前目录。 TCHAR szExePath[MAX_PATH + 1] = { 0 }; GetCurrentDire -
SetCurrentDirectory(),GetCurrentDirectory(),GetModuleFileName(),以及getcwd()的区别
2017-07-13 14:51:52BOOL SetCurrentDirectory( LPCTSTR lpPathName // 程序的目录设置到地址 ); DWORD GetCurrentDirectory( DWORD nBufferLength, // 缓冲区大小 LPTSTR lpBuffer // 存放地址的缓冲区 ); ... -
PE文件-C++-SetCurrentDirectory当前工作文件夹编辑-GetCommandLine函数获取当前命令行参数
2022-08-06 09:19:07作者答疑 1.SetCurrentDirectoryA函数 BOOL SetCurrentDirectory([in] LPCTSTR lpPathName); 设置当前应用程序新当前目录的路径。此参数可以指定相对路径或完整路径。无论哪种情况,都会计算指定目录的完整路径并将...