How to get upper foldername?

39 ビュー (過去 30 日間)
Nik Rocky
Nik Rocky 2020 年 6 月 24 日
コメント済み: Nik Rocky 2020 年 6 月 24 日
Hello,
subfoldername = '/home/user/workspace/QT/Software_2.0_QT/IO/Motor_Set_1/' %changes every loop
foldername = ?
How to get:
'/home/user/workspace/QT/Software_2.0_QT/IO/'
P.S. independent of current folder
Thanks!
  1 件のコメント
KSSV
KSSV 2020 年 6 月 24 日
You should already be having it in hand..isn't it?

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2020 年 6 月 24 日
I put fileparts() into a function called GetParentFolder() because I use it so often. I've attached it.
  3 件のコメント
Image Analyst
Image Analyst 2020 年 6 月 24 日
Sorry, that was written before MATLAB had the strsplit() function so I used a FileExchange function. So I've completely redone the function and attached it. It will also handle some rare stress cases properly. Here is a variety of test cases to check if it worked correctly.
[parentFolder, childFolder] = GetParentFolder('D:/aaa/bbb') % No trailing slash
[parentFolder, childFolder] = GetParentFolder('D:/aaa/') % Treailing slash
[parentFolder, childFolder] = GetParentFolder('D:/aaa')
[parentFolder, childFolder] = GetParentFolder('D:/') % Root folder.
f = fullfile(pwd, 'a.txt'); % What happens if we pass in a file (that exists) instead of a folder? It still works!
[parentFolder, childFolder] = GetParentFolder(f)
% Try a folder with a dot in the deepest folder name so it looks like a filename might look.
folderName = 'D:\OneDrive\Matlab\work\Tests\level1.level2' % Folder must exist for you to test this case.
[parentFolder, childFolder] = GetParentFolder(folderName)
I wanted a general purpose function where I got both the parent folder, and the child (deepest) folder. Note that if you simply use
[parentFolder, childFolder] = fileparts(startingFolder);
and pass in a filename, you won't get the child folder correctly since it would return the base file name of the file as the child folder. Plus if you have a folder where the deepest folder has a dot in the name it won't work then either. So I put in a few lines of code to handle those cases.
%==========================================================================================================================
% Gets the folder one level up. If startingFolder is a filename with an extension it gets the containing folder and the child folder is null.
% Returns null for both if the folder does not exist, and it's not a filename either.
function [parentFolder, childFolder] = GetParentFolder(startingFolder)
parentFolder = []; % Initialize
childFolder = [];
try
if isfolder(startingFolder)
[parentFolder, childFolder, ext] = fileparts(startingFolder);
% Need to append extension for rare cases where deepest folder has a dot in the name.
childFolder = [childFolder, ext];
elseif isfile(startingFolder)
% It's a filename, not a folder. Need to change otherwise childFolder will be returned as the base file name.
[parentFolder, childFolder, ext] = fileparts(startingFolder);
childFolder = []; % No child folder since it's a filename, not a folder name.
end
catch ME
message = sprintf('Error in GetParentFolder():\n%s', ME.message);
uiwait(msgbox(message));
end
return; % from GetParentFolder
end
Nik Rocky
Nik Rocky 2020 年 6 月 24 日
Wow, its works, thank you very much! You do a great job and I'm very helpful for great description and attachment!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePerformance and Memory についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by