2016-04-05 7 views
0

Wir haben einen Server auf Windows, aber es hat ein Netzlaufwerk, das tatsächlich auf einem Linux-Server ist. Das Programm muss eine Datei am gleichen Ort mit dem gleichen Namen (Signale) löschen, es funktioniert in Ordnung, wenn diese Dateien auf dem lokalen Laufwerk sind, aber wenn es auf dem Netzlaufwerk läuft, wird es die Datei manchmal nicht löschen, und noch schlimmer, Die Funktionen geben zurück, dass alles in Ordnung war (dh die Datei wurde gelöscht). Ich habe versucht mit remove, _unlink, DeleteFileA, das Problem besteht immer noch, irgendwann völlig zufällig wird es nicht gelöscht werden und es wird so bleiben.VS2015 Entfernen einer Datei auf Linux von Windows-Programm

Der Code ist wirklich einfach:

bool File::Delete() 
{ 
    if(isFile() && exist()) 
    { 
     return DeleteFileA(filename.c_str()) != 0 ? true : false; 
    } 
    else 
     return false; 
} 

Dies wird immer true zurück, auch wenn die Datei nicht entfernt wird, wenn zum Beispiel wäre es nicht die Erlaubnis, es jedes Mal scheitern (und nicht haben sollte, nicht zufällig) Könnte mir jemand eine Idee geben? Ich lief aus Optionen :(

Edit: Dank @ExcessPhase, wie es scheint tatsächlich Movefile einen Fehler erkennt, so vor dem Löschen Umbenennen kann ein Problem „ERROR_FILE_NOT_FOUND“ erkennen

Sonstiges:. Diese zufälliges problem kann nur passieren, wenn die dateien von linux server erstellt werden.Wenn ich sie aus windows erstellen, werden sie immer gelöscht.Weiterhin: Wenn ich eine datei habe, die das programm nicht löschen kann, und ich erstelle eine andere datei daneben von Windows, das Programm erkennt und löscht das Programm, das zuvor nicht gelöscht werden konnte

Edit2: Näher zu beantworten: Dateiname test und TEST in Linux ist anders, während in Windows ist es das gleiche. Das Problem scheint zufällig zu erscheinen, wenn der Fall nicht übereinstimmt. Aber ich bin mir nicht sicher, da es so zufällig ist.

+0

Gibt es Datei verfügbar von Remote-Laufwerk von der Kommandozeile zu löschen oder mit Datei-Explorer-Tool? Überprüfen Sie die Datei und fahren Sie Zugriffsberechtigungen ein? Überprüfen Sie, ob die Datei vorhanden ist, um Fehler zu vermeiden. – oklas

+0

kann es sein, dass jemand die Datei geöffnet hat - nicht notwendig über Samba sondern direkt unter LINUX. Ich habe das gleiche Problem beim Verschieben einer gerade erstellten DLL-Datei - mit Samba der MoveFile-Systemaufruf fehlschlägt mir sagen, dass jemand anders die Datei geöffnet hat, soweit ich mich erinnere (oder die Berechtigung verweigert). –

+1

versuchen DeleteFile() mit MoveFile() & DeleteFile() zu ersetzen. Verschieben Sie zuerst die Datei unter einem neuen Namen (einfach mit einem Punkt, der an den Dateinamen angehängt wird) und versuchen Sie dann, den neuen Dateinamen zu löschen. –

Antwort

2

Ich glaube, das Problem ist mit Samba-Service unter Linux, die das SMB-Protokoll für Windows implementiert. DeleteFile Funktion fordert nur den SMB-Server (Server Dienst unter Windows), um eine Datei zu löschen. Der Erfolg wird von Samba zurückgegeben.

+0

Dies scheint der Fall zu sein, da das Verschieben der Datei einen Fehler erkennt. Bearbeitete meine Frage. – Silencer

Verwandte Themen