File.OpenText добавляет C:\ вперед, что является ошибкой

Я пытаюсь открыть файл, но по какой-то причине перед именем сервера ставится C:\, что неверно.

Я попробовал два разных способа:

void ParseLogFile(string serverName, string logName)
{
   string lognameFull = logName + ".txt";
   string partialPath = @"\build\logs\";
   string combinedPath = "\\" + serverName + partialPath;
   string filePath = Path.Combine(combinedPath, Path.GetFileName(logNameFull)); 

   //one way:
   StreamReader reader0 = File.OpenText(@"\mach31\"); //error: 
   System.IO.FileNotFoundException : 
   Could not find file 'C:\mach31\ (even if there was a filename here it wouldn't find it with the C)

   //another way (moved cursor to run this and not the one above):
   StreamReader reader = File.OpenText(filePath); //error: 
   System.IO.DirectoryNotFoundException: '   Could not find a part of the path 
   'C:\mach31\build\logs\SpinFileVersionStats.txt'.'
}

Поэтому независимо от имени файла, перед строкой ставится C:. Как мне запретить ему помещать туда C? Мне нужен полный путь к нашему серверу, в котором нет буквы C:.

Я посмотрел на открытый файл с полным UNC-путем Я думаю, мне не нужно делать то, что они делают. а также открыть файл но я делаю то же самое, что и они, но у них нет имени сервера, они используют C:.

Есть идеи, почему по умолчанию используется C: и как это исправить?

Не нужно ли говорить string combinedPath = @"\\" + serverName + partialPath;?

Emperor Eto 29.03.2024 19:02
Path.Combine может состоять из нескольких частей: возможно, было бы лучше использовать это, чем конкатенацию строк.
Andrew Morton 29.03.2024 19:04

Когда вы создаете путь, он пытается создать абсолютный путь, получить текущий каталог, который содержит абсолютный путь, начинающийся с C:\, а затем добавить к нему ваш путь. В Windows необходимо указать абсолютный путь.

Ubaydullo Ibrohimov 29.03.2024 19:05

@EmperorEto Я также пробовал \\ перед именем сервера. И на самом деле, комбинированная переменная пути, указанная выше, действительно показывает \\ в коде.

Michele 29.03.2024 19:16
"\\" — это одиночный символ обратной косой черты.
n0rd 29.03.2024 19:19

В Windows одиночная обратная косая черта перед путем означает: «Относительный путь от корня текущего диска. Например: «\temp» — это то же самое, что «C:\temp» (при условии, что вы находитесь на диск С).

001 29.03.2024 19:21

Если путь не определен как абсолютный, он будет рассматриваться как относительный к текущему рабочему каталогу. Если он начинается с обратной косой черты, путь является «корневым» и рассматривается как относительный к диску текущего рабочего каталога. Вот откуда взялся C:.

n0rd 29.03.2024 19:21

@AndrewMorton Я попробовал строку filePath = Path.Combine("\\" ,serverName, partsPath, logNameFull); и я вижу, что он удаляет имя сервера и добавляет C:, поэтому возникает эта ошибка: System.IO.DirectoryNotFoundException: 'Не удалось найти часть пути 'C:\build\logs\SpinFileVersionStats.txt'.'

Michele 29.03.2024 19:22

@Michele распечатайте filePath или проверьте его значение в отладчике.

n0rd 29.03.2024 19:24

@n0rd - я попробовал строку filePath = Path.Combine("\\\\" ,serverName, partsPath, logNameFull); и путь к файлу отображается как filePath = "\\build\\logs\\SpinFileVersionStats.txt" и удаляется имя сервера

Michele 29.03.2024 19:25
stackoverflow.com/questions/5748032/…
n0rd 29.03.2024 19:34

Спасибо за помощь! Я заставил его работать. Ответ ниже.

Michele 29.03.2024 19:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я заставил его работать с методом uri:

string serverPath = @"\\\\" + serverName;
string logNameFull = logName + ".txt";
string partialPath = @"\build\logs\";
string combinedPath2 = partialPath + logNameFull;
Uri serverUri = new Uri(serverPath + combinedPath2);
string finalPath = serverUri.LocalPath;

StreamReader readerb = File.OpenText(finalPath);

Другие вопросы по теме