2016-09-01 2 views
-1

я стараюсь читать Text файл построчно:Read текстовый файл возврата исключение 'System.NotSupportedException'

static void Main(string[] args) 
{ 
    int counter = 0; 
    string line; 
    string links = @"‪D:\links.txt"; 

    // Read the file and display it line by line. 
    System.IO.StreamReader file = new System.IO.StreamReader(links); 
    while ((line = file.ReadLine()) != null) 
    { 
     Console.WriteLine(line); 
     counter++; 
    } 

    file.Close(); 

    // Suspend the screen. 
    Console.ReadLine(); 
} 

И получил ошибку:

An unhandled exception of type 'System.NotSupportedException' occurred in mscorlib.dll

Additional information: The given path's format is not supported.

Я работаю с Windows 10 Любые предложения что может вызвать эту ошибку? (файл существует в этом пути)

+1

Является ли «статический» модификатор действительным при объявлении «ссылок»? –

+1

Может быть, у вас случайно есть символ нулевой длины. Проверьте этот ответ: http://stackoverflow.com/a/24856870/5572757 – Tophandour

+0

@Tophandour хороший улов, вы можете скопировать и вставить его текст, и действительно есть скрытый символ, показанный '@" D: \ links.txt " .Length', удалив до '@" ". Length' дает' 1', когда он должен быть равен нулю. Глядя на то, как снова преобразовать в биты, чтобы увидеть, что на самом деле есть персонаж. – Quantic

ответ

1

Проблема в том, что в вашей строке есть невидимый символ. Я не знаю, как они туда попали, others догадались, что исходный код прошел через такую ​​программу, как Word, которая изменяет текст без ведома вам. Или вы скопировали и вставляли его откуда-то и что где-то в нем есть невидимый персонаж.

Что касается характера, я нашел его первым копирование вашей строки (если я просто впечатать вашу строку дословно, то это не иметь невидимый характер, он должен быть скопирован из текста), то удаление все между кавычками, а затем с помощью bitconverter выставить фактические байты, что ваш IDE отображается как невидимый символ:

Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes(@"‪")));

дает:

E2-80-AA

Который "Unicode Character 'LEFT-TO-RIGHT EMBEDDING' (U+202A)". Обратите внимание, что @"‪".Length возвращает 1 здесь из-за 1 невидимого символа.

Эта строка, которую я напечатал вручную, вместо копирования из вашей строки, не имеют невидимый характер: Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes(@""))); и просто возвращает string.Empty с длиной 0.

Раствор состоит в том, чтобы стереть эту целую строку (включая ") и просто набрать ее самостоятельно или выделить только видимые символы между кавычками и скопировать/вставить их в новую строку. Вот фиксированная строка для вас: @"D:\links.txt", вы можете скопировать и вставить это, и ваша проблема будет исправлена.

+0

Как я могу это сделать? –

+0

@DanaYeger см. Мое редактирование для некоторых опций о том, как исправить строку. – Quantic

+0

Мне нужно поставить эту строку? Console.WriteLine (BitConverter.ToString (Encoding.UTF8.GetBytes (@ ""))); ?? –

Смежные вопросы