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))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д