#c# #stream
#c# #поток
Вопрос:
Я хочу прочитать содержимое файла, открытого с помощью диалогового окна file, а затем сохранить его в массиве байтов, чтобы передать его веб-службе
Stream myStream;
OpenFileDialog saveFileDialog1 = new OpenFileDialog();
saveFileDialog1.Filter = "zip files (*.zip)|*.zip|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
NSITESERVICE.UploadSoapClient obj = new NSITESERVICE.UploadSoapClient();
byte[] filebytes = //what should i pass it over here...
obj.UploadFile("kamal", "p@ssword", filebytes);
// Code to write the stream goes here.
myStream.Close();
}
}
Я не знаю, где я ошибаюсь
Любая помощь приветствуется. Thnaks
Комментарии:
1. Что я должен передать в byte[] filebytes.
Ответ №1:
Вы ничего не присваиваете filebytes
переменной, поэтому вы, по сути, передаете службе значение null. Используйте File.Метод ReadAllBytes для чтения всех байтов и передачи их веб-сервису.
Комментарии:
1. Да, я передаю null. Это мой вопрос, что я должен передать. Пожалуйста, помогите
Ответ №2:
На самом деле вы не считываете байты из myStream.
byte[] fileBytes = new byte[myStream.Length];
myStream.Read(fileBytes,0,mystream.Length);
obj.UploadFile(...)
Комментарии:
1. В настоящее время предполагается, что весь файл будет прочитан за один вызов. Это опасное предположение.
2. @KamalDeepSingh: Вы должны либо использовать File . Считайте все байты или повторно считывайте из потока и используйте возвращаемое значение из Read , чтобы узнать, сколько было фактически прочитано.
3. @JonSkeet Просто любопытно, в каком случае поток, возвращаемый OpenFileDialog, не будет выполнять полноформатное чтение?
4. @jlew: я не могу сказать наверняка, но в целом не следует предполагать, что потоки возвращают все свои данные за один раз. Единственное исключение из этого правила, которое я обычно допускаю, это
MemoryStream
.OpenFileDialog
Позволяет ли вам извлекать файлы с (скажем) FTP-сервера, отображенного в Explorer? Если да, то это был бы разумный пример того, что он вполне может не вернуть все данные за один раз. Лучше не полагаться на это в любом случае, IMO.