Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 10.06.10 16:58 
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?


ausblenden 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.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!

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: 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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
const Int16 bufferLenght = 1024;//Buffer größe
Int64 buffers = Convert.ToInt64(myFTPFileStream.Length / bufferLenght); //Anzahl der Buffers
Int32 lastBuffer = Convert.ToInt32(myFTPFileStream.Length - (buffers * bufferLenght));//Der Rest

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!

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 11.06.10 20:41 
Dein bisheriger Code war doch im Prinzip ok, den hättest du ruhig beibehalten können :) .
ausblenden 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.

_________________
>λ=