微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

这几个坑,你跳进去过吗?

2016-11-16 21:55 围城莫


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



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


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. 注意绝对路径与相对路径的问题。


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


…………………………………………………………………………………………


昨晚有粉丝说,

可以在文末放一些题目让你们玩玩。


那,今晚


请看题!!!


以下各段代码,请给出a、b、c变量经过运算后的值


1) unsigned int a = 6;  

int b = -20,c;  

c=(a+b > 6) ? 1000 +(a= =b):2015+(b=a); printf("a=%d,b=%d,c=%d \n",a,b,c);


2) int a = 20, b = 15, c;  

c = a+++b; 

printf("a=%d,b=%d,c=%d \n",a,b,c);


3) unsigned char a = -15; 

short b = a+sizeof(&a); int c=(a-b)>>3; 

printf("a=%d,b=%d,c=%d \n",a,b,c);


请解出答案的同学留下你的答案,我知道,这些对你们来说,非常简单!!!


算完之后,我们来斗图啊,昨晚有个粉丝和我疯狂斗图



 
程序员之家 更多文章 字符编码之间的相爱相杀 全栈之MySQL如何优化 漫画:程序员不是修电脑的! 一个牛逼的前端是什么样子? 爱情代码专题(二)
猜您喜欢 一封来自Bob的密信 补码角度对(-2147483648>0)问题的根因分析(下) 今晚公开课:Windows10简介 4个理由告诉你Java为何在编程语言中排行第一 自学的程序员通常缺少哪些技能?