Ich versuche, eine Datei oder einen Ordner basierend auf einem Pfad zu löschen, der keine Erweiterung enthält.NodeJS: Entfernen Sie eine Datei/einen Ordner basierend auf einem Pfad ohne Erweiterung (Design-Ansatz)
Nehmen wir an, ich den folgenden Pfad haben:
/home/tom/windows
windows
kann ein Ordner namens Fenster oder eine Datei windows.txt
genannt werden, da der Pfad selbst nicht die Erweiterung enthält (.txt) muss das Skript raten, ob es den Ordner (falls vorhanden) oder die Datei (falls vorhanden) löschen soll.
Anfängliche Ansatz:
fs.stat(path, (err, stats) ->
/* ---------- RUN IF PATH IS VALID ---------- */
// If we don't have any erros and the path is a directory,
// simply remove that directory and end here
if (!err && stats.isDirectory())
fs.rmdir(path, (err) ->
if (err) then return done(err)
return done(null, 1)
)
/* ---------- ---------- ---------- ---------- -- */
/* ---------- RUN IF PATH IS NOT VALID ---------- */
// If we have an error other than "ENOENT" (non-existend file)
// then return
if (err.code != 'ENOENT') then return done(err)
// Now we know that the path must be a file, thus verify
// its type and extension then unlink
fs.stat(path + '.txt', (err, stats) ->
if (err) then return done(err)
if (!stats.isFile()) then return done(err)
fs.unlink(path + '.txt', (err) ->
if (err) then return done(err)
done(null, 1)
)
)
Erläuterung:
Testen Sie, ob Pfad über fs.stat existiert dann prüfen, ob es ein Verzeichnis ist. Wenn es ein Verzeichnis ist, entfernen Sie es einfach und beenden Sie die Ausführung.
Fortfahren, wenn die Bedingungen im vorherigen Schritt nicht übereinstimmen. Untersuchen Sie, warum die Bedingungen nicht übereinstimmten (err.code). Wenn der Fehler nicht für eine nicht vorhandene Datei gilt, beenden Sie die Ausführung.
[ELSE]
weiter, da wir wissen, dass die Pfaddatei sein muss, da wir vorher geprüft, ob es ein Verzeichnis ist. Fügen Sie die Erweiterung (.txt) an und stellen Sie sicher, dass die Datei wirklich existiert. Wenn dies der Fall ist, heben Sie einfach die Verknüpfung der Datei auf.
Ein anderer Ansatz:
ich die Erweiterung anhängen könnte direkt auf den Pfad und verwenden fs.unklink() und Test für einen Fehlercode genannt EISDIR. Wenn false, muss der Pfad eine gültige Datei sein und daher entfernen. Wenn das stimmt, löschen dir
fs.unlink(path + '.txt', (err) ->
//Path is a valid file, thus remove
if (!err) then return done(null, 1)
//Path is not valid file, thus check if directory
if (err.code != 'ENOENT' && err.code != 'EISDIR')
return done(err)
//Path is directory so remove it
fs.rmdir(path, (err) ->
if (err) then return done(err)
done(null, 1)
)
)
Fazit?
Gibt es Verbesserungen, Lösungen oder Designkonzepte?
Sie sicher, dass Sie nicht über denken das? –
Ich weiß, es ist ziemlich kompliziert, aber am Ende möchte ich einen solchen Ansatz auch auf andere FS-Methoden anwenden. Zum Beispiel '' 'rename()' ''. Das Problem besteht darin, dass der Pfad die Erweiterung zuvor nicht enthält. – Steven
Es ist überhaupt nicht kompliziert, deshalb habe ich mich gefragt, warum du so besorgt bist. –