Rime输入法核心代码分析——WeaselServer文件夹网络化分析(九)

2021SC@SDUSC

基本概念介绍

一、CreateDirectory

说明

创建一个新目录



返回值

Long,非零表示成功,零表示失败。会设置GetLastError



参数表

参数 类型及说明

lpTemplateDirectory String,指定一个模板目录的名字,从中复制默认属性(比如目录中文件的默认压缩方式)。如设为vbNullString,则表示不使用模板

lpNewDirectory String,新目录的名字

lpSecurityAttributes SECURITY_ATTRIBUTES,这个结构定义了目录的安全特性——如果操作系统支持的话

Windows API

This function creates a new directory. If the underlying file system supports security on files and directories, the function applies a specified security descriptor to the new directory.

A RAPI version of this function exists, and it is named CeCreateDirectory (RAPI).

BOOL CreateDirectory(

LPCTSTR lpPathName,

LPSECURITY_ATTRIBUTES lpSecurityAttributes

);

Parameters

lpPathName

[in] Long pointer to a null-terminated string that specifies the path of the directory to be created.

There is a default string size limit for paths of MAX_PATH characters. This limit is related to how the CreateDirectory function parses paths.

lpSecurityAttributes

[in] Ignored; set to NULL.

Return Values

Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError.

Remarks

Some file systems, such as NTFS file system, support compression or encryption for individual files and directories. On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent directory.

Requirements

OS Versions: Windows CE 1.0 and later.

Header: Winbase.h.

Link Library: Coredll.lib.



程序例子

1

2

3

4

5

6

#include<windows.h>

int main()

{

    CreateDirectory("NewFile",0);//在当前目录新建一个文件夹

    return0;

}

二、c_str()

c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针。
————————————————
版权声明:本文为CSDN博主「Lemonbr」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41282102/article/details/82695562

三、ShellExecuteW

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。有几个API函数都可以实现这些功能,但是在大多数情况下ShellExecute是更多的被使用的,同时它并不是太复杂。

四、句柄

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量

Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄 。

句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等 [4]

五、explore命令

命令格式为Explorer [/n][/e],比如/n以“我的电脑”打开一个窗口,/e以“资源管理器”打开一个窗口。

/n表示以“我的电脑”方式打开一个新的窗口,通常打开的是Windows安装分区的根目录。

/e表示以“资源管理器”方式打开一个新的窗口,通常打开的也是Windows安装分区的根目录。

/root,[path]表示打开指定的文件夹,/root表示只显示指定文件夹下面的文件(夹),不显示其它磁盘分区和文件夹;[path]表示指定的路径。

如果不加/root参数,而只用[path]参数,则可以显示其它磁盘分区和文件夹中的内容。另外,[path]还可以指定网络共享文件夹。

/select,[path filename]表示打开指定的文件夹并且选中指定的文件,[path filename]表示指定的路径和文件名。

如果不加/select参数,则系统会用相应的关联程序打开该文件。如果[path filename]不跟文件名就会打开该文件夹的上级目录并选中该文件夹

/NOUACCHECK参数可以强行指示让资源管理器运行在用户最高权限下

二、代码分析

在前一篇分析文章里,我们分别讨论了wcscmp,LPTSTR和命令行参数的具体含义,接下来我们来看一下涉及到这些部分的具体代码:

if (!wcscmp(L"/userdir", lpstrCmdLine))
	{
		CreateDirectory(WeaselUserDataPath().c_str(), NULL);
		WeaselServerApp::explore(WeaselUserDataPath());
		return 0;
	}
if (!wcscmp(L"/weaseldir", lpstrCmdLine))
	{
		WeaselServerApp::explore(WeaselServerApp::install_dir());
		return 0;
	}

        这段代码对于在命令行输入的参数进行了处理,由于当且仅当wcscmp的两个参数相等时,其调用结果输出为0,在其前面取反,就可以实现对输入字符串的具体内容进行判断,只有当前面与后面相等时if才能成立,并执行其中的代码,而这里的输入变量lpstrCmdLine所存储的是当用户调用WinMain函数时所传入的参数,当用户传入的参数是userdir,则按照WeaselUerDataPath中返回的路径创建一个全新的空文件夹,并将其利用ShellExecuteW在shell中将其打开,如果用户输入的变量是weaseldir,则调用install_dir()方法下的GetModuleFileNameW(获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx函数。)来获取当前已经加载的模块的具体路径,并通过调用ecplore方法将其展示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值