Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取文本文件返回';System.NotSupportedException';例外_C#_Reader - Fatal编程技术网

C# 读取文本文件返回';System.NotSupportedException';例外

C# 读取文本文件返回';System.NotSupportedException';例外,c#,reader,C#,Reader,我试图逐行阅读文本文件: 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); whil

我试图逐行阅读
文本
文件:

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();
}
并得到一个错误:

发生类型为“System.NotSupportedException”的未处理异常 在mscorlib.dll中

其他信息:不支持给定路径的格式

我正在使用
windows10

有什么建议会导致这个错误吗?(文件在此路径中存在)

问题是字符串中有一个不可见的字符。我不知道他们是如何做到这一点的,我猜源代码是通过诸如Word之类的程序实现的,该程序在您不知情的情况下修改了文本。或者你从某个地方复制粘贴了它,而某个地方有一个看不见的字符

至于字符,我首先复制字符串(如果我只是逐字输入字符串,那么它就没有不可见字符,必须从文本中复制),然后删除引号之间的所有内容,然后使用位转换器公开IDE显示为不可见字符的实际字节:

Console.WriteLine(位转换器.ToString(Encoding.UTF8.GetBytes)(@)‪")));

给出:

E2-80-AA

也就是说。请注意,
@“‪“.Length
在此处返回
1
,因为1个不可见字符

我手工输入的字符串(而不是从字符串中复制)没有不可见的字符:
Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes(@“”));
,只返回一个字符串。长度为0的空字符串


解决方法是删除整个字符串(包括
”),然后自己键入,或者只突出显示引号之间的可见字符,然后将它们复制/粘贴到新字符串中。这里有一个固定字符串供您使用:
@“D:\links.txt”
,您可以复制并粘贴该字符串,您的问题将得到解决。

是“static”修饰符在声明“links”时甚至有效?可能是您无意中在其中有一个零长度字符。请检查此答案:@Tophandour good catch,您可以复制并粘贴他的文本,并且确实有一个隐藏字符显示在
@”‪D:\links.txt“.Length
,删除到
@”‪“.Length
给出了
1
它应该为零的时间。再次查找如何转换为位以查看字符的实际内容..我不理解这一点,您能详细说明吗?旁注:
Console.Write(File.ReadAllText(links));
代替循环和读卡器是一种较短的实现方式。我如何做到这一点?@DanaYeger查看我的编辑,了解有关如何修复字符串的一些选项。我需要放这行?Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes)(@)‪DanaYeger不,我在解释那部分的错误…你需要打开代码,高亮显示
string links=@“D:\links.txt”
行上的所有文本,然后点击键盘上的“Backspace”删除该文本,然后使用键盘键入:
string links=@“D:\links.txt”“;
。这将解决您的问题。检查不可见字符的另一种方法是在十六进制编辑器中打开代码。在Visual Studio(2019)中,右键单击
解决方案资源管理器中的文件
,选择
使用打开…
,然后选择
二进制编辑器
。对于打开的解决方案之外的文件,请打开
文件
→ <代码>打开
,选择文件,单击
打开
按钮上的箭头,然后选择
用打开…
,然后选择
二进制编辑器