【问题标题】:Matlab: access files relative to working directoryMatlab:访问相对于工作目录的文件
【发布时间】:2019-05-13 17:50:38
【问题描述】:

我注意到大多数访问文件的 Matlab 函数,例如load() 通过在当前路径上查找包含与这些路径匹配的文件或目录的某个目录来解析相对路径。例如。如果当前工作目录是/home/someuser/dir2/home/someuser/dir1 在搜索路径上,则调用load('foo/bar.m') 将在/home/someuser/dir2/foo/bar 上加载/home/someuser/dir1/foo/bar.m

我发现这非常烦人且容易出错,我如何才能访问相对于当前工作目录的文件?

【问题讨论】:

  • 您是否尝试在相对路径前面加上 ./ 以表明它是相对路径?这对我行得通。如果需要多次访问,也可以使用 addpath 添加相对路径,但这很容易出现您描述的阴影。
  • 是的,使用./ 有效,我不知道,谢谢!
  • 对您(或其他人)可能有用的可能是使用 .. 来引用父目录。

标签: matlab


【解决方案1】:

如您所知,Matlab 可以解析相对路径和绝对路径。但我的建议是让您更轻松地处理您的问题:

  1. 在每个(相关/主要)脚本中,确保您的工作区是脚本位置:

PATH.SCRIPT = fileparts(mfilename('fullpath')) cd(PATH.SCRIPT)

  1. 然后,始终使用绝对路径调用函数:

load([PATH.SCRIPT, filesep, 'filename']) 或者 load([PATH.SCRIPT, filesep, '..' , filesep, 'file_at_upper_dir_name']) 或者 load([PATH.SCRIPT, filesep, 'subfolder' , filesep, 'file_at_lower_dir_name'])

  1. 如果可能,尽量不要过多使用 Matlab 的默认路径,并在初始化工作区时调用 restoredefaultpath。这样可以减少路径中可能发生名称冲突的虚假文件夹的可能性。

  2. 正如其他人所提到的,./['.', filesep] 也提供了当前文件夹。

  3. 正如@CrisLuengo 提到的,人们可能更喜欢用fullfile 组合路径而不是filesep,例如:load(fullfile(PATH.SCRIPT, '..', 'file_at_upper_dir_name'))

【讨论】:

  • 我不确定cd 是不是一个好建议。当当前路径从用户下方更改时,用户总是会感到困惑。但是使用绝对路径总是好的。你知道fullfile吗?我认为它比与filesep 连接更容易使用和更清晰。例如load(fullfile(PATH.SCRIPT, 'subdir1', 'subdir2', 'filename')).
  • 要查找相对于当前目录的路径,请使用pwd: fullfile(pwd,'subdir1','filename')
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多