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


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
Edited by Hock, Martin
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information