问:
老师,最近有个想法,如何改变自己的程序名呢(就是防止别人用自己的程序后,对自己的程序重命名,如果改了,每次打开的时候检测一下,如果不对我得重新改回去。
,写来玩的)
答:挺好的想法
用 pApp->Command()
就可以获得你的程序运行时的程序名啦,pApp->Path()获得运行路径
第4讲我们讲过
发现不对,用 mdlFileSys 通用模块的 FMRenameFile 函数即可重命名文件。
但是你不能重命名自己的exe,因为正在使用。你可以运行另外一个exe重命名
或者拷贝一份自己的exe,为新文件名,然后再删除旧文件名的文件
或者这样:
if (文件名不正确)
{
拷贝一份自身,为新文件,文件名正确;
用 SEShellRun 运行它;
生成批处理文件,固定文件名,比如 yuyu.bat;
批处理文件中写删除自己exe的命令行字符串
自己退出;
}
else
{
if (yuyu.bat文件存在)
{
SEShellRun 运行 yuyu.bat;
删除 yuyu.bat
}
正常运行你的程序;
}
实际这样必要性不强。你还不如直接弹窗,或者你的窗口界面的某一部分写上自己的标志、自己的姓名,让用户看到
文件名,用户一般不太注意的
问:其实我查了一个不知道对不对的API是rename小写的,只要输入原来程序的运行路径和然后输入新的内容,就是包括完整路径,但是最后的程序名改为你想要的,但是我用tstring的名义写进去总说无法转化为const wechar *类型,不知道这个对不对
还是我的用法不对,重命名自己的exe我试着打开我的程序,然后手动可以重命名,用代码不可以吗
答:win7以上系统,将文件名设计为文件的属性之一,而非以文件名为ID,win7以上系统在单用户情况下,可以修改文件名。但之前系统不可以,我们之前都是上面跟你说的这样做的。
当然现在用win7以下系统的人很少(虽然不为零),你的程序要不考虑win7以下系统的支持,可以那样直接改名。
rename不是API函数,而是系统库函数,包含以下头文件,而且不要用rename,而要用_trename,见MSDN:
函数的参数类型是字符串指针,你传一个tstring对象行嘛
tstring对象是字符串指针嘛
就像你下次让快递给你寄东西,快递问:寄到哪?我要地址?
然后你不给人家地址,你给人家一部手机。那行嘛
虽然你地址在手机里存着,但你要找出来,直接把地址给人家,对吧?
所以应该用tstring对象的什么函数?
第4讲PPT
而且最好用我们通用模块的函数,我们mdlFileSys 通用模块的 FMRenameFile 函数调用的是shell的API函数,这是操作系统对文件操作的本质!其他任何函数,包括任何C标准库函数,最终都是转换为对它的调用。
刚才不给你了嘛,用 mdlFileSys 通用模块的 FMRenameFile 函数,为啥不试试