找不到路径中的非法字符

时间:2015-02-17 03:15:32

标签: c# winforms

我有一个显示文件路径列表的程序(列表视图)。当您单击包含文件路径的任何列表项时,它会将其分配给selectedFile字符串。到目前为止,它准确地从选择中拉出字符串(基于SelectedIndexChanged事件)。然而,当它基于此路径读取文件时(使用BinaryFile.ReadString),我收到“路径中的非法字符”消息。我认为这是因为“\”字符所以我将“selectedFile”设为静态文件路径,并在字符串前添加“@”。我收到了同样的错误。

private void pclListView_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (ListViewItem item in pclListView.SelectedItems)
        {
            string selectedFile = pclListView.SelectedItems[0].Text;
            Console.WriteLine(selectedFile);

            try
            {
                //Read the data of the selected file. 
                File.AppendText(BinaryFile.ReadString(selectedFile));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

这是引用的“BinaryFile.ReadString(string fileName)”:

public static string ReadString(string filename)
{
    byte[] fileBytes = System.IO.File.ReadAllBytes(filename);

    return String.Join("", (from i in fileBytes select __byteLookup[i]).ToArray());
}

我是学生,所以在学习的过程中,我也愿意接受更好的方法。感谢。

1 个答案:

答案 0 :(得分:2)

您的代码执行以下操作:

  1. 从(显然)ListView对象获取文件的名称。
  2. 将该文件名传递给ReadString()方法。
  3. ReadString()方法然后从给定文件中读取所有二进制数据。
  4. 接下来,它使用一些名为__byteLookup的数组将二进制数据转换为字符串(可能是十六进制字符串值或类似的数组)。
  5. 最后,它返回该字符串并将其传递给File.AppendText()方法。
  6. 在第5步,有两个严重的问题:

    1. 你忽略了AppendText()方法的返回值,这就是让你实际追加的东西(即通过使用返回的StreamWriter来写一些东西到文件)。
    2. 但更糟糕的是:

      1. 您正在将生成的字符串作为文件名传递。如果没有看到__byteLookup的声明,就不可能确切地说出文件名的非法字符。但很容易说,那里必须有某些东西无效。
      2. 不幸的是,你的问题中没有足够的细节来确切知道你的意图。即你似乎想要将文本附加到某个文件。但是,我不能说,可能是什么文件。我也不能说你应该如何追加文本。从您的问题中不清楚您希望如何实际使用从ReadString()方法返回的字符串。也许您打算将该字符串附加到其他文件中?也许你确实想要以某种方式使用该字符串来生成一个有效的文件名,你要在哪个文件中添加一些不同的文本?根本不清楚。

        唯一明确的是使用该字符串作为文件名是不正确的。 :)

        如果从上面您无法弄清楚如何修复代码,请参阅How to create a Minimal, Complete, and Verifiable exampleHow do I ask a good question?,了解有关如何改进问题的详细信息,以便提供更好的答案。