在路径中找不到非法字符



我有一个程序,它显示文件路径列表(列表视图)。当您单击任何包含文件路径的列表项时,它会将其指定给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(字符串文件名)":

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. 从(显然)ListView对象获取文件名
  2. 将该文件名传递给ReadString()方法
  3. ReadString()方法然后从给定文件中读取所有二进制数据
  4. 接下来,它使用一个名为__byteLookup的数组(可能是十六进制字符串值的数组或类似的数组)将二进制数据转换为字符串
  5. 最后,它返回该字符串并将其传递给File.AppendText()方法

在步骤#5,有两个严重的问题:

  1. 您忽略了AppendText()方法的返回值,这将允许您实际附加内容(即使用返回的StreamWriter向文件中写入内容)

但更糟糕的是:

  1. 您正在将生成的字符串作为文件名进行传递。如果没有看到__byteLookup的声明,就不可能确切地说出文件名中有什么非法字符。但很容易说,那里一定有无效的东西

不幸的是,你的问题没有足够的细节来确切地知道你想做什么。也就是说,你似乎想把文本附加到某个文件中。但我不能说那可能是什么文件。我也不能说你应该如何附加文本。从您的问题中还不清楚您希望如何实际使用ReadString()方法返回的字符串。也许你想把这个字符串附加到其他文件中?也许你确实想以某种方式使用该字符串来生成一个有效的文件名,你会在哪个文件中附加一些不同的

唯一清楚的是,使用该字符串作为文件名不是正确的做法。:)

如果从上面的内容中你无法准确地找出如何修复代码,请参阅如何创建一个最小、完整和可验证的示例以及我如何提出一个好问题?了解如何改进问题的详细信息,以便提供更好的答案。

最新更新