Путь к файлу передается в файл.Метод ReadAllBytes переопределяется путем добавления пути выполнения

#c# #windows-services #.net-5 #akka.net #topshelf

Вопрос:

Путь к файлу передается в файл.Методы ReadAllBytes переопределяются путем добавления пути выполнения

Это консольное приложение, работающее как служба, использующая верхнюю полку в отладке.

 var bytes = File.ReadAllBytes(@"‪‪d:ubuntu-20.04.2.0-desktop-amd64.iso.torrent");

System.IO.IOException: 'The filename, directory name, or volume label syntax is incorrect. : 'C:FRsrcServicebinDebugnet5.0‪D:ubuntu-20.04.2.0-desktop-amd64.iso.torrent
 

Трассировка стека

 at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
at System.IO.FileStream.CreateFileOpenHandle(FileMode mode, FileShare share, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.File.ReadAllBytes(String path)
at FR.Engine.Actors.FileReaderActor.OnReadFileCommand(FileReadCommand command) in C:FRsrcFR.EngineActorsFileReaderActor.cs:line 18
at FR.Engine.Actors.FileReaderActor.<.ctor>b__0_0(FileReadCommand command) in C:FRsrcFR.EngineActorsFileReaderActor.cs:line 11
at Akka.Tools.MatchHandler.PartialHandlerArgumentsCapture`2.Handle(T value)
at Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(Object message, PartialAction`1 partialAction)
at Akka.Actor.ReceiveActor.OnReceive(Object message)
at Akka.Actor.UntypedActor.Receive(Object message)
at Akka.Actor.ActorBase.AroundReceive(Receive receive, Object message)
at Akka.Actor.ActorCell.ReceiveMessage(Object message)
at Akka.Actor.ActorCell.Invoke(Envelope envelope)
 

Для целей отладки я добавил ссылку на строку для ее значения

 var fullpath = Path.GetFullPath(command.Path);
 

введите описание изображения здесь

Это работает для простого консольного приложения .net5 с верхней полкой. Так что я подозреваю Akka.net причина этого.

Комментарии:

1. Вау, никогда не видел этого раньше, я могу только предположить, что либо D: диск не установлен, либо D он должен быть написан с заглавной буквы.

2. Вы пробовали слэш в стиле linux / ?

3. @AlphaDelta попробовал капитал, но результат все тот же.

4. @AlexeyRumyantsev Да, я сделал — тот же результат.

5. Это очень странная ситуация, ваш путь определенно абсолютен, выглядит как ошибка.

Ответ №1:

Некоторые нестандартные символы (невидимые) кодируются перед «d:» в вашей строке, и именно поэтому у вас такое поведение. Если вы перепишете свой путь вручную (с кавычками), он будет работать.

введите описание изображения здесь

В этом примере «Путь к файлу»-это копирование-вставка вашего пути, а «Путь к файлу» — это тот, который я переписал.

введите описание изображения здесь

filePathA = 51 байт

filePathB = 45 байт

введите описание изображения здесь

Комментарии:

1. Это действительно причина. Я вручную написал путь, и он работает так, как ожидалось.