Pfadhandling
im Code sind sehr oft Pfade mit nur für Windows passenden Pfad-Trennzeichen "zusammengebaut"
-
diese müssten mit 'filesep' ersetzt werden (siehe 26e51046) damit sie auch unter Mac und Linux laufen
-
generell sollten die Pfade jeweils "frisch" zusammengesetzt werden, idealerweise mit einer Funktion die doppelte fileseperatoren vermeidet
-
beim erstellen von relativen Pfaden durch subtrahieren zweier Pfade sollte die Vorsichtsmaßnahme bzgl. der eingehenden Variable (String oder Char) vorgenommen werden um zukünftige Fehler zu vermeiden
- Einbau von https://de.mathworks.com/matlabcentral/fileexchange/28249-getfullpath + möglichkeit Pfade relative zu behalten
- Alternativ eine Hilfsfunktion wie: finepath (siehe unten)
Mögliche Strategie für Pfadtests:
Es besteht die Gefahr, dass Ordner fälschlicherweise und unbewusst an Orten angelegt werden, die nicht der Intention des Nutzers entsprechen. Hier zwei Optionen denkbar: Entweder eine Flag, die per default auf false gesetzt wird, ob Ordner immer am angegebenen Pfad angelegt werden sollen. Oder es wird der übergebene Pfad näher analysiert. Schritt 1: Analyse absoluter/relativer Pfad (absolute Pfade beginnen entweder mit 'Laufwerksbuchstabe:' oder '\' unter Windows (Fallunterscheidung anhand von 'ispc', 'isunix', 'ismac'). Schritt 2: Bspw. kann der Pfad zerlegt und eine Betrachtung vorgenommen werden: bei 1-x Subfoldern werden diese (falls absolut: unterhalb des letzten bekannten Ordners, falls relativ ausgehend von pwd/mfilename) ohne Weiteres angelegt. Bei x>x_max gibt es eine Rückfrage an den User unter Anzeige des absoluten Pfads, ob die Ordner wirklich angelegt werden sollen.
Schritte zur Umsetzung
-
manuell alle Dateipfad"anpassungen" durchsuchen und "filesep" einpflegen (siehe 26e51046) -
Strategie festlegen -
Hilfsfunktionen umsetzen -
Funktionen bei allen Pfadangaben (einlesen/abfragen) einsetzen, sowie bei allen Pfadanpssungen
Finepath
function valid_path = finepath(varargin)
%% function finepath
% This function assures, that paths are all handled in the same format,
% to prevent compatibility issues.
% Output will be a char array.
% This function can be used for two kinds of operations:
% 1. With one input it ensures that a path does not end with an
% filesep to prevent conflicts with this code.
% Example: 'C:\User\Desktop\data\' is an user input,
% the function output will be 'C:\User\Desktop\data';
% 2. Several inputs will be added to one path, e.g.
% varinput1 = 'C:\User\', varinput2 = 'Desktop\data'
% valid_path will be 'C:\User\Desktop\data'
% fcn.GenFullPath turns relative into absolute paths
%% code
work_path = cellstr(varargin);
work_path = regexp(work_path, filesep, 'split');
work_path = [work_path{:}];
work_path = work_path(~strcmp(work_path, ''));
valid_path = strjoin(work_path, filesep);
valid_path = fcn.GetFullPath(valid_path);
end