HOWTO · MATLAB

Überprüfen Sie die Existenz einer Datei in MATLAB

Mit den Funktionen exist() und dir() in MATLAB kann überprüft werden, ob eine Datei in einem Verzeichnis existiert.

Auf dieser Seite

Verwenden Sie exist() für eine direkte Prüfung oder dir(), wenn Sie zusätzlich Details zu einem Treffer benötigen. Geben Sie einen Dateinamen oder Pfad ausdrücklich an, wenn Sie festlegen möchten, wo MATLAB sucht. Die folgenden Beispiele erstellen jeweils eigene temporäre Dateien und verwenden MATLAB-kompatible Syntax. Beide wurden mit Octave ausgeführt; die angezeigte Ausgabe stammt von Octave, nicht von MATLAB.

Prüfen, ob eine Datei vorhanden ist, mit der Funktion exist() in MATLAB

Mit exist() lässt sich prüfen, ob eine Datei oder ein Ordner vorhanden ist. Ein Name ohne weitere Angaben kann jedoch auch einem anderen MATLAB-Element entsprechen, etwa einer Workspace-Variablen oder einer Funktion. Für eine reine Dateiprüfung geben Sie den Suchtyp 'file' an: Das Ergebnis 2 weist auf eine passende Datei hin. Für einen Ordner verwenden Sie 'dir'; das Ergebnis 7 weist auf einen passenden Ordner hin. Das Ergebnis 0 bedeutet, dass kein Element des angeforderten Typs gefunden wurde. Relative Namen löst MATLAB anhand des aktuellen Ordners und des Suchpfads auf. Mit einem absoluten Pfad geben Sie einen bestimmten Speicherort an. Weitere Informationen finden Sie in der MathWorks-Referenz zu exist und in der Dokumentation zur Rangfolge von Funktionen.

Dieses vollständige Beispiel erstellt eine Datei und prüft ihren vollständigen Pfad. Es gibt den Dateitypcode aus, der gemäß der Semantik von exist() für die erstellte Datei 2 lautet. Die Ausführung mit Octave gab Folgendes aus:

root = tempname();
mkdir(root);
filePath = fullfile(root, 'report.txt');
fid = fopen(filePath, 'w');
fprintf(fid, 'Monthly report\n');
fclose(fid);

fileType = exist(filePath, 'file');
fprintf('File type: %d\n', fileType);

delete(filePath);
rmdir(root);
File type: 2

Mit dem Suchtyp 'file' vermeiden Sie, dass eine gleichnamige Variable oder ein Ordner als die gesuchte Datei behandelt wird. Um einen Ordner zu prüfen, rufen Sie stattdessen exist(folderPath, 'dir') auf. Die ältere Befehlsform exist name ist direkt in der Eingabeaufforderung praktisch. Mit der Funktionsform kann ein Skript das Ergebnis dagegen speichern und vergleichen.

Prüfen, ob eine Datei vorhanden ist, mit der Funktion dir() in MATLAB

Verwenden Sie dir(), wenn Sie neben der Prüfung, ob ein Eintrag vorhanden ist, auch dessen Details benötigen. Die Funktion gibt ein Strukturarray zurück; jeder Treffer kann Felder wie name, folder, date, bytes und isdir enthalten. Welche Felder vorhanden sind, kann je nach MATLAB-Version variieren. Verlassen Sie sich daher nicht auf eine feste Anzahl von Feldern. Mit isempty(matches) prüfen Sie, ob das Muster etwas gefunden hat; matches(1).bytes liefert die Byteanzahl eines Dateitreffers. Ein Ordner ist ein Verzeichniseintrag und keine Liste mit einer festen Anzahl von Elementen. Ein Aufruf von dir() mit einem Ordnerpfad kann dessen Inhalt auflisten. Prüfen Sie daher isdir, wenn Sie einen Ordner von einer Datei unterscheiden möchten. Relative Pfade beziehen sich auf den aktuellen Ordner von MATLAB; mit einem vollständigen Pfad ist das Ziel eindeutig angegeben. Weitere Informationen finden Sie in der MathWorks-Referenz zu dir.

Dieses separate Beispiel erstellt eine Datei, übergibt genau ihren Pfad an dir() und gibt den zurückgegebenen Namen und die Größe aus. Die Ausführung mit Octave gab Folgendes aus:

root = tempname();
mkdir(root);
filePath = fullfile(root, 'animal.jpg');
fid = fopen(filePath, 'w');
fprintf(fid, 'image data');
fclose(fid);

matches = dir(filePath);
if isempty(matches)
    fprintf('No match\n');
else
    fprintf('Name: %s\n', matches(1).name);
    fprintf('Bytes: %d\n', matches(1).bytes);
end

delete(filePath);
rmdir(root);
Name: animal.jpg
Bytes: 10

Wenn Sie nur prüfen möchten, ob eine Datei vorhanden ist, ist exist(path, 'file') die einfachere Wahl. Verwenden Sie dir(), wenn Sie Details zum Eintrag oder eine Auflistung anhand eines Platzhaltermusters benötigen. Nutzen Sie dabei das zurückgegebene Strukturarray, statt aus der Größe einer Ordnerauflistung auf einen Treffer zu schließen.