Problem beim umbenennen der Datei auf dem FTP-server in .NET Framework 4.0!
Ich habe ein problem Umbenennung eine FTP-Datei mit den folgenden code:
Dim Request As FtpWebRequest = DirectCast(WebRequest.Create(New Uri("ftp://sftp.mycompany.com/myfile.txt")), FtpWebRequest)
'Set that we will be renaming a file
Request.Method = WebRequestMethods.Ftp.Rename
'Provide the new filename
Request.RenameTo = NewFileName
'The credentials needed to log onto the server
Request.Credentials = New NetworkCredential("username", "password")
'We are going to enable SSL for the communication with the FTP server as required by the remote server.
Request.EnableSsl = True
Request.UsePassive = True
Request.KeepAlive = False
'Create a Response object getting the downloaded file
Dim Response As FtpWebResponse = DirectCast(Request.GetResponse(), FtpWebResponse)
Response.Close()
Ich eigentlich nie hatte es funktioniert oder benötigt umbenennen einer FTP-Datei bis .NET 4.0 also das war der 1. code, den ich schrieb. Eine enge derivitave dieser code zum herunterladen der Datei FUNKTIONIERT, so ist es nicht, eine SSL-oder FTP-Problem (Lesen Sie für die Ablaufverfolgung detail) Offenbar, obwohl dieser code wurde dokumentiert, um die Arbeit in der Framework 3.5 oder vor. In VS.NET 2010 .NET Framework 4.0 Projekt, das ich immer wieder: "Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. Datei nicht gefunden, kein Zugriff)."
Erraten, was... kopiert den genauen code in ein altes VS.NET 2008 test-Projekt lief es wieder -> funktioniert perfekt!
So, ich dachte, ich würde einfach wickeln Sie diesen code in eine binäre Ausrichtung auf das 3.5 Framework und verweisen dann in meine VS.NET 2010-Projekt zu überlisten bug, aber es hat nicht funktioniert.
Ich habe versucht, das hinzufügen einen workaround habe ich gefunden, die besagt hinzufügen das Präfix "%2E/" im Dateinamen hat nicht funktioniert für mich. Meine trace-Protokoll gehalten, die Ausgabe, die die gleichen Ergebnisse:
System.Net Information: 0 : [2228] FtpControlStream#15409429 - Resonanz [257 "/Benutzer/Firma" is current directory]
System.Net Information: 0 : [2228] FtpControlStream#15409429 - Senden-Befehl [RNFR /myfile.txt]
System.Net Information: 0 : [2228] FtpControlStream#15409429 - Resonanz [550-Datei /myfile.txt nicht gefunden]
VS.NET 2008 hat unterschiedliche Ergebnisse ommiting den 1. slash vor dem umbenennen der Datei:
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Resonanz [257 "/Benutzer/Firma" is current directory]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Senden-Befehl [CWD /Benutzer/Unternehmen/]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Resonanz [250 Befehl CWD erfolgreich]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Senden-Befehl [RNFR myfile.txt]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Resonanz [350 neuen Namen Eingeben]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Senden-Befehl [RNTO myfileOLD.txt]
System.Net Information: 0 : [6460] FtpControlStream#40715158 - Resonanz [250 Umbenannt]
Ich habe versucht, jede Kombination und kann nicht damit es funktioniert, außer beim laufen VS.NET 2008 oder vor. Das klingt wie ein Fehler oder eine undokumentierte Verfahren ändern, die wahrscheinlich garantiert einen Eintrag auf connect.microsoft.com.
Jede Hilfe oder Anregungen zu diesem?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sah ich dieses Zitat in einem forum
Hatte ich so etwas wie dieses:
Wollte ich die Datei verschieben zu
remotedirectory/archive/filename.txt
so, sobald ich den ftp-Anfrage war ich in der remotedirectory Verzeichnis, so ich war also in der Lage, zu erreichen, ist mein Ziel wie diese:
ist und ich nicht mehr hab den Fehler 550.
Die Antwort oben beschrieben, war nicht für mich arbeiten.
Weder hat diese Arbeit für mich:
Was passiert eigentlich in meinem Fall, dass der komplette Pfad, wo ich wollte meine Datei verschoben wurde Hinzugefügt, um den alten Weg, als ob einer relativen Speicherort von Dateien aktuellen Standort.
z.B. ich habe eine Datei bei ftp://127.0.0.1/usr/john/temp/file.fmf und ich möchte um es zu verschieben um ftp://127.0.0.1/usr/mary/archive/file.fmf. Ich verwendet (und diese gearbeitet haben .Net Framework 3.5 und früher):
Aber nicht .Net Framework 4.0.
In der System.Net trace fand ich, dass ich versuchte, ersetzen Sie die Datei nach usr/john/temp/usr/mary/Archiv/Datei.fmf. Dieser Standort nicht existieren, in der Tat. Also änderte ich das RenameTo in einen relativen Pfad:
Wieder, die Datei wurde verschoben, um es neuen Standort.
Obwohl ich sehe das lediglich als umgehen, nicht als Lösung, und zwar habe ich keine Ahnung, wirklich, es zu lösen, ich bin froh, dass es wieder funktioniert.
Ok, ich habe eine Arbeit um. Wie man sehen konnte VS.NET 2008-version auch Probleme, die ein change directory Befehl: "CWD /Benutzer/Unternehmen/" das ist nicht isuued in VS.NET 2010-version. Die undokumentierte (zumindest von dem, was ich gelesen habe), aber praktikable Lösung ist die Verwendung der /%2f escape-Zeichen in der Anfrage-URI NUR zwischen den Ordnern, die aufgelöst werden, als das aktuelle Verzeichnis, wenn auf dem server einloggen. Im wesentlichen hatte ich explizit und geben Sie einen absoluten Pfad mit dieser besonderen escape-Zeichen nur zwischen den Standard-Ordner Lagen. Die neue URL-Anforderung Zeile code ist wie folgt:
Ich glaube, das ist wahrscheinlich nur ein problem, die auftreten können, für diejenigen, melden Sie sich auf FTP-Servern, wo Sie sind entschlossen, ein Standard-Verzeichnis automatisch und kann nicht einmal das Verzeichnis in der request-URI.