How to get upper foldername?

40 vues (au cours des 30 derniers jours)
Nik Rocky
Nik Rocky le 24 Juin 2020
Commenté : Nik Rocky le 24 Juin 2020
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 commentaire
KSSV
KSSV le 24 Juin 2020
You should already be having it in hand..isn't it?

Connectez-vous pour commenter.

Réponse acceptée

Image Analyst
Image Analyst le 24 Juin 2020
I put fileparts() into a function called GetParentFolder() because I use it so often. I've attached it.
  3 commentaires
Image Analyst
Image Analyst le 24 Juin 2020
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 le 24 Juin 2020
Wow, its works, thank you very much! You do a great job and I'm very helpful for great description and attachment!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Performance and Memory dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by