I get these errors when I run this code and need help finding a solution.

조회 수: 8 (최근 30일)
Hello, the code below is supposed to display a selected folder in a graphical tree and then open its subfolders and files. However, when I run it, it gives me the following errors related to dir and callback function:
Error using dir
Function is not defined for 'matlab.ui.container.TreeNode' inputs.
Error in mytreeapp/nodechange (line 14)
files=dir(node);
Error using matlab.ui.control.internal.controller.ComponentController/executeUserCallback (line 352)
Error while evaluating Tree PrivateSelectionChangedFcn.
The input of dir needs to be a string so i tried converting the root using char but I got this error:
Error using char
Conversion to char from matlab.ui.container.TreeNode is not possible.
I would appreciate it if someone can help me find a solution to these errors.
f=uifigure; % Figure
t=uitree(f, 'Position', [20 20 150 150]); %Tree
t.SelectionChangedFcn=@nodechange;
%Select the folder using uigetdir and set it as the root node of the tree
root=uitreenode(t, 'Text', uigetdir);
%Callback function when node is selected
function nodechange (t, eventdata, handles)
node=eventdata.SelectedNodes;
% Get a list of all files and folders in this folder.
files=dir(node);
%Get a logical vector that tells which is a directory
dirFlags=[files.isdir];
%Extract only those that are directories
subFolders=files(dirFlags);
%Loop to display every subfolder as a node
for k=1: length (subFolders);
FolderName=subFolders(k).name;
nodes(k)=uitreenode(t, 'Text', FolderName);
end
end
Thank you.
  댓글 수: 2
TADA
TADA 2019년 1월 8일
UI controls are not convertible to strings
but the tree node should have a property with the string you need
I'm guessing it's Text, but you should have a look at the documentation
Fatima Mansour
Fatima Mansour 2019년 1월 8일
Yes the uitreenode property is set to Text in the code, as stated in thhe documentation, but I am getting an error.

댓글을 달려면 로그인하십시오.

채택된 답변

TADA
TADA 2019년 1월 9일
Yes the uitreenode property is set to Text
by that do you mean this line of code?
nodes(k)=uitreenode(t, 'Text', FolderName);
If you ment this line, it sets the text of the tree node to be the folder name
Your problem is here:
files=dir(node);
where you send the tree node as an argument to dir function, while dir expects a character array, hence the error.
what you need to do is this:
files=dir(node.Text);
after that you will still have some more issues of setting the callbacks of the new nodes, duplication of the tree when reselecting a folder both of which you don't handle in the callback function
  댓글 수: 6
Fatima Mansour
Fatima Mansour 2019년 1월 21일
Wow it is perfect!! Makes so much sense to have to provide the path of the folder and not just the name and to add the new nodes to the node and not the tree. Just had to add a vetor and loop to display the files as well. Thank you very much!! Appreciate it!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 File Operations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by