FileStream - "Отказано в доступе по пути." - C#

Узнай цену своей работы

Формулировка задачи:

Hi. Проблема такова: есть клиент и сервер. Клиент отсылает файл, сервер его принимает. Для этого на сервере крутится в отдельном потоке код приема файлов с применением сокетов. Для записи полученного массива байт в файл используется FileStream. При этом почему-то порождается указанное исключение. С чем это может быть связано?
var fileReceive = new Thread(delegate()
                {
                    //Создаем Listener на порт "по умолчанию"
                    TcpListener Listen = new TcpListener(Convert.ToInt32(Properties.Settings.Default.fileReceivePort));
                    //Начинаем прослушку
                    Listen.Start();
                    //и заведем заранее сокет
                    Socket ReceiveSocket;
                    while (true)
                    {
                        try
                        {
                            //Пришло сообщение
                            ReceiveSocket = Listen.AcceptSocket();
                            Byte[] Receive = new Byte[256];
                            //Читать сообщение будем в поток
                            using (MemoryStream MessageR = new MemoryStream())
                            {
 
                                //Количество считанных байт
                                Int32 ReceivedBytes;
                                Int32 Firest256Bytes = 0;
                                String FilePath = "";
                                do
                                {//Собственно читаем
                                    ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0);
                                    //Разбираем первые 256 байт
                                    if (Firest256Bytes < 256)
                                    {
                                        Firest256Bytes += ReceivedBytes;
                                        Byte[] ToStr = Receive;
                                        //Учтем, что может возникнуть ситуация, когда они не могу передаться "сразу" все
                                        if (Firest256Bytes > 256)
                                        {
                                            Int32 Start = Firest256Bytes - ReceivedBytes;
                                            Int32 CountToGet = 256 - Start;
                                            Firest256Bytes = 256;
                                            //В случае если было принято >256 байт (двумя сообщениями к примеру)
                                            //Остаток (до 256) записываем в "путь файла"
                                            ToStr = Receive.Take(CountToGet).ToArray();
                                            //А остальную часть - в будующий файл
                                            Receive = Receive.Skip(CountToGet).ToArray();
                                            MessageR.Write(Receive, 0, ReceivedBytes);
                                        }
                                        //Накапливаем имя файла
                                        FilePath += Encoding.Default.GetString(ToStr);
                                    }
                                    else
 
                                        //и записываем в поток
                                        MessageR.Write(Receive, 0, ReceivedBytes);
                                    //Читаем до тех пор, пока в очереди не останется данных
                                } while (ReceivedBytes == Receive.Length);
                                //Убираем лишние байты
                                String resFilePath = FilePath.Substring(0, FilePath.IndexOf('\0'));
                                //Создадим папку для будущего файла
                                string filesPath = @"files";
                                DirectoryInfo di = new DirectoryInfo(filesPath+@"\"+resFilePath);
                                if (!di.Exists)
                                    di.Create();
                                
                                using (var File = new FileStream(filesPath + @"\" + resFilePath, FileMode.Create))
                                {//Записываем в файл
                                        File.Write(MessageR.ToArray(), 0, MessageR.ToArray().Length);
                                }

                            }
                        }
                        catch (System.Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
 
                    }
                });

Решение задачи: «FileStream - "Отказано в доступе по пути."»

textual
Листинг программы
using (var File = new FileStream(filesPath + @"\" + resFilePath + @"\" + resFilePath, FileMode.Create))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы