Ich habe ein Problem mit einer Dateiaktualisierung Teil eines ASP.NET MVC-Programms, an dem ich arbeite. Die Grundvoraussetzung ist, dass das Programm ein bearbeitetes Bild vom Benutzer aufnimmt und dann die alte Datei mit den neuen Daten aktualisiert, wobei der alte Name beibehalten wird. Wenn die Datei jedoch aus dem temporären Ordner in den Ordner verschoben wird, in dem sie gespeichert werden soll, wird sie als neue Datei gespeichert, während die alte beibehalten wird. (Zum Beispiel existieren "foo 1-1.jpg" und "foo 1-1.jpg" im selben Ordner). Soweit ich das beurteilen kann, sind die beiden Dateinamen identisch. Warum passiert das und wie mache ich es so, dass es die alte Datei zuerst wie beabsichtigt löscht?Programm speichert eine Datei, aber löscht nicht alte Datei mit dem gleichen Namen
Ich bekomme den alten Dateinamen vor dem Verschieben, also sollte es dort kein Problem geben. Es gibt auch keine Pfadprobleme.
Ich bin mir nicht sicher, ob ein Problem mit dem übergebenen Pfad vorliegt, aber ich verwende dieselbe Methode, um den Dateipfad zu verschieben. Daher weiß ich nicht, warum FileDelete fehlschlagen würde() und nicht File.Move(). Hier
ist der Code in Frage:
/// <summary>
/// Move a number of files to a single directory, keeping their names
/// and overwriting if the switch is toggled.
/// Will ignore nonexistent files, and return false if the specified directory does not exist.
/// Returns true if it succeeded, false if it did not.
/// </summary>
/// <param name="filePaths">An array of filepath strings, </param>
/// <param name="saveDirectory">The path to the directory to use</param>
/// <param name="overWrite">Optional, defaults to false. Whether or not
/// to overwrite any existing files with the same name in the new directory.
/// If false, skips files that already exist in destination.</param>
/// <returns>bool</returns>
public static bool MoveSpecificFiles(string[] filePaths, string saveDirectory, bool overWrite = false)
{
//If the directory doesn't exist, error out.
if (!Directory.Exists(saveDirectory))
{
return false;
}
string fileName;
try
{
foreach (string filePath in filePaths)
{
//Check if the file to be moved exists. If it doesn't, skip it and go to the next one.
if (File.Exists(filePath))
{
fileName = Path.GetFileName(filePath);
//if the overwrite flag is set to true and the file exists in the new directory, delete it.
if (overWrite && File.Exists(saveDirectory + fileName))
{
//WHERE THE ERROR IS OCCURING
File.Delete(saveDirectory + fileName);
}
//If the file to be moved does not exist in the new location, move it there.
//This means that duplicate files will not be moved.
if (!File.Exists(saveDirectory + fileName))
{
File.Move(filePath, saveDirectory + fileName);
}
}
//throw new ArgumentException();
}
}
catch (Exception)
{
//check = saveDirectory + " " + Path.GetFileName(filePaths[0]);
return false;
}
return true;
}
Jede Hilfe wäre sehr willkommen.
Was ist die Fehlermeldung, die Sie bekommen? – Shyju
Keine spezifische Fehlermeldung, nur unbeabsichtigtes Verhalten. File.Delete findet die angegebene Datei nicht, und es kann gefolgert werden, dass keine Ausnahme erzeugt wird, weil das Bild verschoben wird. Das Problem ist, dass es die alte Datei finden sollte, weil ich in einer früheren Methode den Namen der alten Datei ergreife, um sie an diese Datei weiterzugeben. –
Sind Sie sicher, dass der Wert der 'overWrite'-Variable wahr ist? – Shyju