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))