#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.0D: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. Это действительно причина. Я вручную написал путь, и он работает так, как ожидалось.