데이터 쓰기/읽기를 위해 MemoryMappedFiles와 함께 작동하는 몇 가지 방법이 있습니다. "file.mmf"와 같이 파일 이름에 간단한 문자열을 사용하면 제대로 작동합니다. 그러나 전체 디렉토리 경로를 사용하면 위에서 언급 한 예외가 throw됩니다. - Exception has been thrown by the target of an invocation.
내부 예외가있는 경우 - {"Could not find a part of the path."}
.MemoryMappedFiles 경로의 일부를 찾을 수 없습니다.
"C:\\Users\\MyUser\\Documents\\Visual Studio 2012.mmf"
그리고 예외는 '사용'첫 번째 줄에 발생
Path.Combine
을 사용하고 있습니다 :
public void WriteToFile(string fileName, string value)
{
string newFileName = CombineDirectory(fileName);
byte[] newValue = Encoding.UTF8.GetBytes(value);
long capacity = newValue.Length + INT_MAXVALUE_TO_BYTEARRAY_LENGTH;
using (var mmf = MemoryMappedFile.CreateFromFile(newFileName, FileMode.Create, newFileName, capacity))
{
using (var accesor = mmf.CreateViewAccessor())
{
byte[] newValueLength = BitConverter.GetBytes(value.Length);
accesor.WriteArray(0, newValueLength, 0, newValueLength.Length);
accesor.WriteArray(INT_MAXVALUE_TO_BYTEARRAY_LENGTH, newValue, 0, newValue.Length);
}
}
}
내 경로는 다음과 같습니다 : 여기 내 방법은 같은 모습입니다.
File.Create
과 같은 파일 경로를 사용하여 파일을 만들려고해도 문제없이 파일이 생성됩니다.
누구든지 제안 사항이 있으면 좋을 것입니다.
안부
음, 처음에 내 맵 이름 중 하나가 작동하지 않았다 (경로)없이 파일 이름 만했다. 그러나 GUID를 사용하면이 기능이 작동합니다. 도와 주셔서 감사합니다. –
@ Georgi-it 파일 이름에서 확장자를 제거하고 그것을 mapname으로 사용하면 작동합니다 (물론 파일 이름에 확장자가 있어야합니다). – Alex
mapname이 파일 경로와 구별되어야하는 곳이면 어디에 문서화되어 있습니까? 전혀? – antlersoft