Entwickler-Ecke
IO, XML und Registry - FTP-Upload -> Format von Datei geht verloren
Christoph1972 - Do 10.06.10 16:58
Titel: FTP-Upload -> Format von Datei geht verloren
Hallo Leute,
ich sende ein Worddokument auf einen FTP-Server, das funktioniert auch soweit. Wenn ich aber das Dokument wieder runterlade und versuche es zu öffnen, dann kommt eine Fehlermeldung „Das Dokument kann nicht konvertiert werden. Wdc637“ oder so ähnlich.
Was mache ich denn beim upload falsch?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| using (FileStream myFTPFileStream = new FileStream(transferFile, FileMode.Open)) { FtpWebRequest ftp = WebRequest.Create(FTPSettings.Host + @"/" + FTPSettings.Directory + "/" + fileName) as FtpWebRequest; ftp.Method = WebRequestMethods.http://Ftp.UploadFile; ftp.Credentials = new NetworkCredential(FTPSettings.User, FTPSettings.PW); ftp.Timeout = 10000; FtpWebResponse response = (FtpWebResponse)ftp.GetResponse(); response.Close(); Stream requestStream = ftp.GetRequestStream();
const Int16 bufferLenght = 2048; Byte[] buffer = new Byte[bufferLenght];
Int32 readBytes = myFTPFileStream.Read(buffer, 0, bufferLenght);
do { readBytes = myFTPFileStream.Read(buffer, 0, bufferLenght); requestStream.Write(buffer, 0, bufferLenght);
} while (readBytes != 0);
requestStream.Close(); myFTPFileStream.Close(); } |
Über Tipps und Anregungen bin ich wie immer dankbar!
Kha - Do 10.06.10 21:07
Warum wirfst du denn den ersten Block einfach weg (vor der Schleife)? Außerdem darfst du natürlich nur so viele Bytes schreiben, wie readBytes angibt.
Christoph1972 - Fr 11.06.10 15:43
Ah, prima! Bisher habe ich immer nur Textdatein versendet, da war das kein Problem. Ich habe das jetzt korregiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| const Int16 bufferLenght = 1024;Int64 buffers = Convert.ToInt64(myFTPFileStream.Length / bufferLenght); Int32 lastBuffer = Convert.ToInt32(myFTPFileStream.Length - (buffers * bufferLenght)); Byte[] buffer = new Byte[bufferLenght];
for (Int32 i = 0; i < buffers; i++) { myFTPFileStream.Read(buffer, 0, buffer.Length); requestStream.Write(buffer, 0, buffer.Length); } if (lastBuffer > 0) { myFTPFileStream.Read(buffer, 0, lastBuffer); requestStream.Write(buffer, 0, lastBuffer); } |
Vielen Dank für die Unterstützung!
Kha - Fr 11.06.10 20:41
Dein bisheriger Code war doch im Prinzip ok, den hättest du ruhig beibehalten können :) .
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Byte[] buffer = new Byte[bufferLenght];
int readBytes;
do { readBytes = myFTPFileStream.Read(buffer, 0, bufferLenght); requestStream.Write(buffer, 0, readBytes);
} while (readBytes != 0); |
Über
Convert lese ich mal hinweg ;) . Warum du überhaupt Int16 und Int64 ins Spiel bringst, habe ich auch nicht verstanden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!