Mam prosty skrypt w Matlabie i chcę załadować plik. Wygląda na to, że działa tylko wtedy, gdy plik jest w tym samym katalogu co skrypt. Jeśli dodam plik do katalogu, nie odczytuje go.
Na przykład:
fileID = fopen("myfile","r" ,"n", "US-ASCII");
ale kiedy to położę myfile
w files
:
fileID = fopen("files/myfile","r" ,"n", "US-ASCII");
lub
fileID = fopen("./files/myfile","r" ,"n", "US-ASCII");
Otrzymuję -1 jako identyfikator pliku. Nie można odczytać pliku.
Odpowiedzi:
1 dla odpowiedzi № 1Zgodnie z komentarzami dzieje się tak, ponieważnajprawdopodobniej do ścieżki MATLAB dodano ścieżkę lokalizacji skryptu, ale do ścieżki nie dodano podkatalogu, w którym znajdował się plik. Dlatego nie może znaleźć pliku. Dlatego, aby uniknąć tego w przyszłości, musisz fizycznie zmienić katalog (tj. Katalog roboczy) miejsca, w którym aktualnie pracuje MATLAB, w którym przechowywany jest twój skrypt.
To wtedy powinno działać odniesienie lokalne. Możesz to zrobić, używając albo cd
funkcja, przechodząc na górę okna MATLABgdzie widzisz listę katalogów, klikając strzałkę po prawej i pociągając menu rozwijane, aby zmienić katalog, wpisując żądany katalog, klikając dowolne puste miejsce na liście katalogów, aby włączyć pole tekstowe:
... lub jeśli używasz kodu w edytorze MATLAB, zażądasz zmiany katalogów, ponieważ skrypt, który próbujesz uruchomić, nie znajduje się obecnie w katalogu roboczym.
0 dla odpowiedzi nr 2
Możesz także programowo dodać podfoldery w swoim katalogu skryptów, używając mfilename
, fileparts
, genpath
i addpath
:
[dir, ~, ~] = fileparts(mfilename("fullpath")); % locate your script directory
addpath(genpath(fullfile(dir))); % add the folder and all subfolders to Matlab search directory
% then load your file.
fileID = fopen("myfile","r" ,"n", "US-ASCII")
Jeśli ważne jest również, aby wszystkie wyjścia były umieszczone w tym samym katalogu co plik skryptu, możesz cd
do twojego katalogu skryptów:
cd(dir)