ofstream有时会打开失败,如下面这段代码,即ofs.fail()==true。并且在有的文件路径能够打开,成功生成文件,有的路径却不能。其原因可能是没有系统写文件的权限。
ofstream ofs(swc_file.c_str(),std::ios::out);
if(ofs.fail())
{
cout<<"open swc file error"<<endl;
return false;
}
例如,在使用V3D中某个插件的dofunc功能的时候,由VS打开的cmd命令行默认路径是c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
,在这个路径是没有权限生成文件的。但是用同一个插件的domenu功能却能够成功运行程序,因为其默认路径是Path\V3D\v3d_external\bin
,所以能够成功打开并生成一个文件。
解决办法:
可以自己写一个bat文件打开VS命令行,并自动跳转到我们常用的路径(带有读写权限的)。这个办法对我们平时调试和编译插件的时候还能节省一些时间。
具体步骤:
- 新建文本文档,命名为 bianyi.txt,暂时放在一个路径,例如桌面。
- 将以下内容加入到bianyi.txt文件中。
e:
cd e:\V3D\vaa3d_tools\hackathon\
cls
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" amd64
其中,
第二行是你期待打开VS的cmd的默认路径。
第一行是你第二行路径的系统根目录加冒号。因为cd到另一个系统根目录需要在cd前或在cd后输入这个系统根目录。
第三行是右键VS的cmd->属性,目标(T)处的内容。
- 将bianyi.txt改名成bianyi.bat,然后运行发现就是自己常用路径下可以编译的状态了。
再完成以下的步骤,就可以将其放在任务栏快速启动,并且可以换图标。
例如将默认的这个图标换为E:\V3D\v3d_external\v3d_main\v3d\pic\v3dIcon.ico
。这个路径的图标是V3D软件官方的图标。
- 打开
C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
快速启动栏路径。但是有的电脑可能没有这个路径,可能只到了C:\Users\Default\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
这个文件夹,将 bianyi.bat 复制到这个路径下。 - 将 bianyi.bat 改名为bianyi.exe
- 将 bianyi.exe 拖到任务栏
- 右键点击任务栏 bianyi.exe属性,点击更改图标,选择E:\V3D\v3d_external\v3d_main\v3d\pic\v3dIcon.ico
- 将快速启动栏文件夹里的 bianyi.exe 修改回 bianyi.bat
- 将任务栏中 bianyi.exe 修改回 bianyi.bat
同理 采用该种方式打开的V3D,界面在遇到问题后不会强制退出。
e:
cd e:\V3D\v3d_external\bin
cls
%comspec% /k ""vaa3d_msvc.exe""