Где проблема в моем коде, чтобы загрузить файл на сервер с Windows Mobile - PullRequest
0 голосов
/ 19 ноября 2009

У меня проблема с загрузкой zip-файла с сервера Windows Mobile. на сервере создается файл .zip, если я открываю файл, который не может открыть, и он поврежден

вот код

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl);

        req.Method = "PUT";
        req.AllowWriteStreamBuffering = true;

        // Retrieve request stream and wrap in StreamWriter
        Stream reqStream = req.GetRequestStream();
        StreamWriter wrtr = new StreamWriter(reqStream);

        // Open the local file
        StreamReader rdr = new StreamReader(localFile);

        // loop through the local file reading each line 

        char[] buff = new char[1024];
        int inLine = rdr.Read(buff, 0, 1024);
        //int inLine = rdr.ReadBlock (buff,0,1024);
        while (inLine > 0)
        {
            wrtr.WriteLine (buff);

           inLine = rdr.Read (buff, 0, 1024);
        }

        rdr.Close();
        wrtr.Close();

        try
        {
            req.GetResponse();
        }
        catch
        {

        }
        reqStream.Close();

Спасибо

1 Ответ

0 голосов
/ 19 ноября 2009

Первая проблема, которую я вижу, состоит в том, что вы всегда пишете все содержимое 'buff', а не только количество прочитанных байтов. Если ваш размер файла не делится равномерно на 1024, это проблема. Это также проблема в том, что даже чтение не возвращает полных 1024 байта.

Обновление 1

Второе, что я здесь задаю, это то, почему вы используете char [] для хранения двоичных данных? Это просто плохая практика вокруг. char для строковых данных (а char в CE равен 2 байта). Используйте байт [] для двоичных данных - вот для чего он. Вполне возможно, что текущая кодировка делает что-то вроде удаления MSB из байтов данных, потому что вы помещаете его в символ. Это также может быть связано с проблемой размера.

...