文件操作中的几个大坑

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

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

  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 Files\cmake2.8,工程编译正常。但就因为这一个问题,半天的时间一下就没了……

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

    copy /y D:\C++Workspace\ProjectA\config.txt D:\C++Workspace\ProjectB\

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

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

然后我进行了一个尝试:

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

Ok,它成功了!

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

copy /y D:\CppWorkspace\ProjectA\config.txt D:\CppWorkspace\ProjectB

Ok,一切正常!

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

如何跳过大坑?

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

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

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得用于任何商业用途,转载请注明出处。

时间: 2024-10-16 10:25:05

文件操作中的几个大坑的相关文章

关于Scala文件操作中出现的问题

在各种项目中,我们常常需要用到文件操作,笔者在近期的项目中遇到了一个与文件操作相关的问题. 在代码实现的过程中,笔者首先定义了一个文件路径:def PATH = "/a/b/c.txt" 之后开始使用文件操作:val source1 = Source.fromFile(PATH) 在for循环中,逐行读取文件.处理文件:for(line1 <- source1.getLines()) { // 逐行处理逻辑  } 在这一轮对文件的各行处理之后,笔者希望再次对处理后的结果进行下一轮

php 文件操作中几种方法整理

1.获取文件夹下所有文件个数 echo ShuLiang("../0503lianxi"); function ShuLiang($filename) { if(is_dir($filename))//判断是不是文件夹 { $attr=glob($filename."/*");//是文件夹则遍历目录 $sl=0; foreach($attr as $v) { if(is_dir($v)) { $sl=$sl+ShuLiang($v); } else { $sl++;

python3_文件操作中file.seek()方法

1.seek函数 file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动. 如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置. file.seek(0)是重新定位在文件的第0位及开始位置file = open("test.txt","rw") #注意这行的变动file.seek(3) #定位到第3个 2.示例 from sys i

python关于文件操作中的字符个数和字节数

记得刚开始学习python文件操作写文件的时候有个问题,很奇怪.最后知道了就是字节数的原因. 我们先来看个例子. 新建个文件存为utf-8命名为0117utf-8.txt记得去掉BOM头. 我们用r+模式尝试去修改 >>> fp=open("d:\\pydelete\\0117utf-8.txt","r+")>>> fp.write("aa")2>>> fp.close()>>&g

开发技术--浅谈文件操作与字符编码

开发|浅谈文件操作与字符编码 听说Python的文件操作很容易在某一些电脑上出问题,然而罪魁祸首就是字符编码.让我们来了解一些底层的编码方式. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 本文主要分为两大部分,一部分是如何使用Python进行文件操作,另一部分是聊一下字符编码的那些事.(比较绕,尽量用最最最通俗的话表述~~) 文件操作 1.文件操作方式 open(

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据

MySQL系列:innodb引擎分析之文件IO

innodb作为数据库引擎,自然少不了对文件的操作,在innodb中所有需要持久化的信息都需要文件操作,例如:表文件.重做日志文件.事务日志文件.备份归档文件等.innodb对文件IO操作可以是煞费苦心,其主要包括两方面,一个是对异步io的实现,一个是对文件操作管理和io调度的实现.在MySQL-5.6版本的innodb还加入了DIRECT IO实现.做了这么多无非是优化io操作的性能.在innodb的文件IO部分中,主要实现集中在os_file.*和fil0fil.*两个系列的文件当中,其中o

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r

python 修改文件中的内容

在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内容,如果是就替换内容,并且将修改替换过的内容和没有修改的内容全部写入到新的文件中. # 打开旧文件 f = open('file_text.txt','r',encoding='utf-8') # 打开新文件 f_new = open('file_text_bak.txt','w',encoding