time | Calls | line |
---|
| | 1 | function f = fullfile(varargin)
|
| | 2 | %FULLFILE Build full file name from parts.
|
| | 3 | % F = fullfile(FOLDERNAME1, FOLDERNAME2, ..., FILENAME) builds a full
|
| | 4 | % file specification F from the folders and file name specified. Input
|
| | 5 | % arguments FOLDERNAME1, FOLDERNAME2, etc. and FILENAME can be strings,
|
| | 6 | % character vectors, or cell arrays of character vectors. Non-scalar
|
| | 7 | % strings and cell arrays of character vectors must all be the same size.
|
| | 8 | %
|
| | 9 | % If any input is a string array, F is a string array. Otherwise, if any
|
| | 10 | % input is a cell array, F is a cell array. Otherwise, F is a character
|
| | 11 | % array.
|
| | 12 | %
|
| | 13 | % The output of FULLFILE is conceptually equivalent to character vector
|
| | 14 | % horzcat operation:
|
| | 15 | %
|
| | 16 | % F = [FOLDERNAME1 filesep FOLDERNAME2 filesep ... filesep FILENAME]
|
| | 17 | %
|
| | 18 | % except that care is taken to handle the cases when the folders begin or
|
| | 19 | % end with a file separator.
|
| | 20 | %
|
| | 21 | % FULLFILE collapses inner repeated file separators unless they appear at
|
| | 22 | % the beginning of the full file specification. FULLFILE also collapses
|
| | 23 | % relative folders indicated by the dot symbol, unless they appear at
|
| | 24 | % the end of the full file specification. Relative folders indicated
|
| | 25 | % by the double-dot symbol are not collapsed.
|
| | 26 | %
|
| | 27 | % To split a full file name into folder parts, use split(f, filesep).
|
| | 28 | %
|
| | 29 | % Examples
|
| | 30 | % % To build platform dependent paths to files:
|
| | 31 | % fullfile(matlabroot,'toolbox','matlab','general','Contents.m')
|
| | 32 | %
|
| | 33 | % % To build platform dependent paths to a folder:
|
| | 34 | % fullfile(matlabroot,'toolbox','matlab',filesep)
|
| | 35 | %
|
| | 36 | % % To build a collection of platform dependent paths to files:
|
| | 37 | % fullfile(toolboxdir('matlab'),'iofun',{'filesep.m';'fullfile.m'})
|
| | 38 | %
|
| | 39 | % See also FILESEP, PATHSEP, FILEPARTS, GENPATH, PATH, SPLIT.
|
| | 40 |
|
| | 41 | % Copyright 1984-2018 The MathWorks, Inc.
|
| | 42 |
|
< 0.001 | 1518 | 43 | narginchk(1, Inf);
|
0.007 | 1518 | 44 | persistent fileSeparator;
|
0.002 | 1518 | 45 | if isempty(fileSeparator)
|
| | 46 | fileSeparator = filesep;
|
< 0.001 | 1518 | 47 | end
|
| | 48 |
|
0.004 | 1518 | 49 | theInputs = varargin;
|
| | 50 |
|
< 0.001 | 1518 | 51 | containsCellOrStringInput = false;
|
0.003 | 1518 | 52 | containsStringInput = false;
|
| | 53 |
|
< 0.001 | 1518 | 54 | for i = 1:nargin
|
| | 55 |
|
0.003 | 3036 | 56 | inputElement = theInputs{i};
|
| | 57 |
|
< 0.001 | 3036 | 58 | containsCellOrStringInput = containsCellOrStringInput || iscell(inputElement);
|
| | 59 |
|
< 0.001 | 3036 | 60 | if isstring(inputElement)
|
| | 61 | containsStringInput = true;
|
| | 62 | containsCellOrStringInput = true;
|
| | 63 | theInputs{i} = convertStringsToChars(theInputs{i});
|
< 0.001 | 3036 | 64 | end
|
| | 65 |
|
0.003 | 3036 | 66 | if ~ischar(theInputs{i}) && ~iscell(theInputs{i}) && ~isnumeric(theInputs{i}) && ~isreal(theInputs{i})
|
| | 67 | error(message('MATLAB:fullfile:InvalidInputType'));
|
0.004 | 3036 | 68 | end
|
| | 69 |
|
0.001 | 3036 | 70 | end
|
| | 71 |
|
< 0.001 | 1518 | 72 | f = theInputs{1};
|
< 0.001 | 1518 | 73 | try
|
0.001 | 1518 | 74 | if nargin == 1
|
| | 75 | if ~isnumeric(f)
|
| | 76 | f = refinePath(f, fileSeparator);
|
| | 77 | else
|
| | 78 | f = char(f);
|
| | 79 | end
|
< 0.001 | 1518 | 80 | else
|
< 0.001 | 1518 | 81 | if containsCellOrStringInput
|
| | 82 | theInputs(cellfun(@(x)~iscell(x)&&isempty(x), theInputs)) = [];
|
< 0.001 | 1518 | 83 | else
|
0.032 | 1518 | 84 | theInputs(cellfun('isempty', theInputs)) = '';
|
< 0.001 | 1518 | 85 | end
|
| | 86 |
|
< 0.001 | 1518 | 87 | if length(theInputs)>1
|
0.051 | 1518 | 88 | theInputs{1} = ensureTrailingFilesep(theInputs{1}, fileSeparator);
|
< 0.001 | 1518 | 89 | end
|
< 0.001 | 1518 | 90 | if ~isempty(theInputs)
|
0.041 | 1518 | 91 | theInputs(2,:) = {fileSeparator};
|
0.002 | 1518 | 92 | theInputs{2,1} = '';
|
0.018 | 1518 | 93 | theInputs(end) = '';
|
< 0.001 | 1518 | 94 | if containsCellOrStringInput
|
| | 95 | f = strcat(theInputs{:});
|
< 0.001 | 1518 | 96 | else
|
0.022 | 1518 | 97 | f = [theInputs{:}];
|
< 0.001 | 1518 | 98 | end
|
< 0.001 | 1518 | 99 | end
|
0.052 | 1518 | 100 | f = refinePath(f,fileSeparator);
|
0.001 | 1518 | 101 | end
|
| | 102 | catch
|
| | 103 | locHandleError(theInputs(1,:));
|
< 0.001 | 1518 | 104 | end
|
| | 105 |
|
< 0.001 | 1518 | 106 | if containsStringInput
|
| | 107 | f = string(f);
|
< 0.001 | 1518 | 108 | end
|
0.005 | 1518 | 109 | end
|
Other subfunctions in this file are not included in this listing.