添加相对路径

在matlab中当代码很多时常常将结果存在不同的文件夹下面,常常使用相对路径对函数进行调用,但有时会存在问题。举个栗子:

代码结构如下:

/codes/A/AA/code1.m

/codes/A/lib_A/lib1.m

/codes/B/BB/code2.m

/codes/B/lib_B/lib2.m

代码的依赖关系如下:

code1.m 依赖lib1.m

code2.m 依赖lib2.m和code1.m

小麻雀栗子如下:

code1.m

function code1(a,b)
addpath('../lib_A/');
c=[a,b];
lib1(c);
end

lib1.m

function lib1(string_name)
print(string_name);
end

lib2.m

function str_name=lib2(number_name)
str_name=['00',num2str(number_name)];
end

code2.m

addpath('../lib_B/');
shot1=12345;
shot2=39045;
str1=lib2(shot1);
str2=lib2(shot2);
addpath('../../A/AA/');
code1(str1,str2);

测试运行结果:

意料之外的,会出现报错:

Undefined function or variable 'lib1'.

Error in code1 (line 5)
lib1(c);

出现这个错误的原因是运行的文件code2.m位于/code/B/BB/位置,这个是进行相对路径搜索的原点。

通过执行addpath('../lib_B/')可以正确的加载lib2.m,运行addpath('../../A/AA')也可以正确的地加载code1.m

但是在调用code1.m的过程,运行这句加载语句却出现了错误,addpath('../lib_A/');

这是因为虽然我们已经调用了code1.m但是此时的搜索原点仍然是以主调函数code2.m为基准的。相当于在/code/B/BB/的路径下addpath('../lib_A/'),这样自然找不到lib1.m。

要解决这个问题,可以在code2.m的文件中添加lib1.m所在的位置。addpath('../../A/lib_A/'),这样就可以正确的运行code2.m了。

当然,这个解决方法并不是很令人满意,因为每次从外部调用函数的时候,都要额外添加该函数所依赖的路径。如果可以使被叫函数自动根据自己的位置调用自身所依赖的路径,那么一定会方便很多。如果园子里的大神有什么解决方案,欢迎留言支招。

Matlab: 路径的操作的更多相关文章

  1. Matlab命令——目录操作(windows&Linux)

    Matlab命令——目录操作(windows&Linux) 1. filesep用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/).有时此命令结合ispc命令使 ...

  2. Node.js文件系统、路径的操作详解

    17173 17173 2 75 2014-12-12T05:06:00Z 2014-12-12T05:06:00Z 21 2735 15595 www.17173.com 129 36 18294 ...

  3. 图像卷积、相关以及在MATLAB中的操作

    图像卷积.相关以及在MATLAB中的操作 2016年7月11日 20:34:35, By ChrisZZ 区分卷积和相关 图像处理中常常需要用一个滤波器做空间滤波操作.空间滤波操作有时候也被叫做卷积滤 ...

  4. Node.js文件系统、路径的操作函数

    Node.js文件系统.路径的操作函数 目录 Node.js文件系统.路径的操作函数 1.读取文件readFile函数 2.写文件 3.以追加方式写文件 4.打开文件 5.读文件,读取打开的文件内容到 ...

  5. Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作

    matalb具有灵活的图像处理,代码编写起来简洁而高效.而OpenCV具有很多成熟的计算机视觉算法,能够处理很多实时的识别处理等问题,而且代码运行起来效率很高.所以如何结合两者之间的优点,是让很多学术 ...

  6. (转)AIX下的MPIO、RDAC、SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系)

    AIX下的MPIO.RDAC.SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系) 原文:http://blog.163.com/huangbao_007 ...

  7. matlab常用目录操作

    总结matlab下常用到的目录操作 添加当前文件夹及其子文件夹至搜索路径 % add path rootDir = fileparts(mfilename('fullpath')); addpath( ...

  8. MATLAB基础指令操作

    由于课程实验需要学习使用了MATLAB,在此记录一下MATLAB的基本操作和命令,供参考与查阅. 学习过程中的资料也链接如下: MATLAB矩阵运算:https://wenku.baidu.com/v ...

  9. python - os.path,路径相关操作

    python处理系统路径的相关操作: # -*- coding: utf-8 -*- import os # 属性 print '__file__: %s' % __file__ # 绝对路径(包含文 ...

随机推荐

  1. IOS的自定义控件

    这里做一个类似于下面界面的小案例 1.创建一个空的布局文件 .xib new File -->User Interface -->选择View 创建一个空的view ,会自动生成一个 .x ...

  2. LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法

    题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...

  3. iOS开发,UITableView相关问题

    第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.co ...

  4. java容器类

    一.  容器类: 下图摘自<Java编程思想>,很好地展示了整个容器类的结构. 由上图可知,容器类库可分为两大类,各自实现了Collection接口和Map接口,下面就常见的类进行一下分类 ...

  5. System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别

    //System.arraycopy,只拷贝已存在的数组元素 int[] src = {0, 1, 2}; int[] dest = new int[3]; System.arraycopy(src, ...

  6. New Adventure----GUI Design Studio

    新建项目工程    File->New Project 新建设计文件    Project->New Design 单个设计文件的页面,F9运当前设计页面   页面控件中有绿色包围的控件为 ...

  7. c# 对加密的MP4文件进行解密

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. IO回忆录之怎样过目不忘(BIO/NIO/AIO/Netty)

    有热心的网友加我微信,时不时问我一些技术的或者学习技术的问题.有时候我回微信的时候都是半夜了.但是我很乐意解答他们的问题.因为这些年轻人都是很有上进心的,所以在我心里他们就是很优秀的,我愿意多和努力的 ...

  9. js中toggle()及toggleClass()的使用详解

    在javascript中toggle()为连续点击事件,当里面含有多个function(){}函数时,每次点击依次执行里面的function的函数,直至最后一个.随后每次点击都重复对这几个函数的轮番调 ...

  10. 第 13 章 可扩展性设计之 MySQL Replication

    前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server ...