41

文件操作中的几个大坑

 5 years ago
source link: http://www.10tiao.com/html/605/201806/2654251623/2.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击上方“程序员大咖”,选择“置顶公众号”

关键时刻,第一时间送达!


在程序开发中你经常会碰到很多关于路径的问题的。比如读取文件,写文件等,加载一张图片,读取一个配制,你必要传一个文件的路径。然而你也许常常碰到这样的问题:逻辑是对的,但就出不来你想要的结果。这是为什么呢?因为对于文件操作的路径问题,有很多你稍不慎就会掉入的大坑。



说几个掉进大坑的惨痛经历


1.编译一个C++的工程,工程中要用到cmake工具,而cmake安装在C:Program Files (x86)cmake2.8(程序默认安装时,安装到这个目录是很正常不是吗)。然而问题来了,工程怎么编不过,报一个很诡异的异常:


Microsoft.CppCommon targets(151, 5):error MSB6006:”cmd.exe” exited with code 3.


后来我把cmake安装目录的整个文件夹拷到了C:Program Filescmake2.8,工程编译正常。但就因为这一个问题,半天的时间一下就没了……


2.由于工程配制的需要,要写一个脚本,脚本的功能很简单,就把一个文件从A目录拷贝(复制)到B目录。于是很自然地就写了这样一行命令:


copy /y D:C++WorkspaceProjectAconfig.txt D:C++WorkspaceProjectB


很简单吧,没有逻辑错误吧!但结果呢?结果这样的:



我瞅了一眼又一眼,config.txt这个文件确实是存在的,而且路径也是正确的。


然后我进行了一个尝试:



然后我直接把config.txt复制一份到D:config.txt,再进行了一次尝试:



Ok,它成功了!


作为一个C++程序员,取一个“C++Workspace“这样文件夹作为工作目录也是可以理解的吧!但结果却是花了我半个多小时解决上面这个问题。于是我不得不把”C++Workspace“改成了”CppWorkspace“,然后写这样一行命令:


copy /y D:CppWorkspaceProjectAconfig.txt D:CppWorkspaceProjectB



Ok,一切正常!


3.还有的还有,我就不一一举例了,总之关于路径问题,坑很多……


如何跳过大坑?


那如何避免掉进大坑呢?大体总结以下几点,可依次循着这个思路逐步排查:


  1. 检查写的路径是否正确;

  2. 检查要操作的目录、文件是否具有权限,如读写权限(Linux系统或类Unix系统中还有执行权限);

  3. 检查路径中是否包含特殊的字符,如’(‘、’)’、’’、’ ‘、’+’、’-‘、’:’、’%’、’&’、’#’、’$’、’!’、’|’、’*’、’@’、’?’、’,’等;

  4. 注意绝对路径与相对路径的问题。


当你怎么也搞不定一个问题,并且逻辑也没有错误时,就不要闷头苦干了!按照上面的思路检查一下是不是路径的问题吧。



  • 来源:luoweifu

  • 链接:http://blog.csdn.net/luoweifu/article/details/48350397

  • 程序员大咖整理发布,转载请联系作者获得授权

【点击成为Java大神】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK