Не могу получить доступ к файлу
Делаю программу, где в одном проекте клиент, а в другом сервер. Клиент отсылает запрос серверу в виде строки с координатами углом прямоугольника и цвета. Передаю с помощью MemoryMappedFile.
Вылезает исключение в Task8(1) в строке
MemoryMappedFile SharedMemory=MemoryMappedFile.CreateFromFile(path,FileMode.OpenOrCreate,"SharedMemory",4096,MemoryMappedFileAccess.ReadWriteExecute);
System.UnauthorizedAccessException: Access to the path is denied.
Task8(1).cs:
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Net;
using System.Net.Http;
using System.Text;
using Task8;
namespace Task8 {
public class Client
{
static void Main(string[] args)
{
string path = "C:\\Users\\Максим\\source\\repos\\Os_Lab4\\Task8\\SharedMemory.txt";
File.Create(path);
Console.WriteLine("Client");
Console.WriteLine("------------------------------------");
Console.WriteLine("Enter angles coordinates and color");
char[] message = Console.ReadLine().ToCharArray();
//Размер введенного сообщения
int size = message.Length;
MemoryMappedFile SharedMemory=MemoryMappedFile.CreateFromFile(path,FileMode.OpenOrCreate,"SharedMemory",4096,MemoryMappedFileAccess.ReadWriteExecute);
//Создаем объект для записи в разделяемый участок памяти
using (MemoryMappedViewAccessor writer = SharedMemory.CreateViewAccessor(0, size * 2 + 4))
{
//запись в разделяемую память
//запись размера с нулевого байта в разделяемой памяти
writer.Write(0, size);
//запись сообщения с четвертого байта в разделяемой памяти
writer.WriteArray<char>(4, message, 0, message.Length);
}
Console.WriteLine("Сообщение записано в разделяемую память");
Console.ReadLine();
}
}
}
Task8.cs:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO.MemoryMappedFiles;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Task8
{
public class Task8
{
private Semaphore semaphore;
static HttpListener server1 = new();
static HttpListener server2 = new();
public Task8()
{
server1 = new();
server2 = new();
}
public static void Main(string[] args)
{
Console.WriteLine("Server");
Console.WriteLine("------------------------------------");
Console.WriteLine("Server started");
server1.Prefixes.Add("http://127.0.0.1:8080/");
server1.Start();
for (int i = 0; i < 1; i++)
{
Process process = Process.Start("C:\\Users\\Максим\\source\\repos\\Os_Lab4\\Task8(1)\\bin\\Debug\\net6.0\\Task8(1).exe");
}
Draw(server1);
}
public static void Draw(HttpListener server)
{
string path = "C:\\Users\\Максим\\source\\repos\\Os_Lab4\\Task8\\SharedMemory.txt";
HttpListenerContext context = server.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
char[] message;
//Размер введенного сообщения
int size;
MemoryMappedFile SharedMemory = MemoryMappedFile.OpenExisting("SharedMemory",MemoryMappedFileRights.Read);
using (MemoryMappedViewAccessor reader = SharedMemory.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read))
{
size = reader.ReadInt32(0);
}
using (MemoryMappedViewAccessor reader = SharedMemory.CreateViewAccessor(4, size * 2, MemoryMappedFileAccess.Read))
{
//Массив символов сообщения
message = new char[size];
reader.ReadArray<char>(0, message, 0, size);
}
while (true)
{
string[] line = (message.ToString()).Split();
int x, y, x1, y1;
int.TryParse(line[0], out x);
int.TryParse(line[1], out y);
int.TryParse(line[2], out x1);
int.TryParse(line[3], out y1);
string width = Math.Abs(x1 - x) + "";
string height = Math.Abs(y1 - y) + "";
string color = line[4];
string rect = "<svg>\r\n <rect x=\"" + line[0] + "\" y=\"" + line[1] + "\" width=\"" + width + "\" height=\"" + height + "\"/>\r\n</svg>";
// Data.figures.Add(rect);
string html = "<HTML><BODY>" +rect+ "</BODY></HTML>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(html);
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}
}
}
}