我有一个程序,它显示文件路径列表(列表视图)。当您单击任何包含文件路径的列表项时,它会将其指定给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());
}
我是一名学生,所以在学习的过程中,我也对更好的做事方式持开放态度。谢谢
您的代码执行以下操作:
- 从(显然)
ListView
对象获取文件名 - 将该文件名传递给
ReadString()
方法 ReadString()
方法然后从给定文件中读取所有二进制数据- 接下来,它使用一个名为
__byteLookup
的数组(可能是十六进制字符串值的数组或类似的数组)将二进制数据转换为字符串 - 最后,它返回该字符串并将其传递给
File.AppendText()
方法
在步骤#5,有两个严重的问题:
- 您忽略了
AppendText()
方法的返回值,这将允许您实际附加内容(即使用返回的StreamWriter
向文件中写入内容)
但更糟糕的是:
- 您正在将生成的字符串作为文件名进行传递。如果没有看到
__byteLookup
的声明,就不可能确切地说出文件名中有什么非法字符。但很容易说,那里一定有无效的东西
不幸的是,你的问题没有足够的细节来确切地知道你想做什么。也就是说,你似乎想把文本附加到某个文件中。但我不能说那可能是什么文件。我也不能说你应该如何附加文本。从您的问题中还不清楚您希望如何实际使用 唯一清楚的是,使用该字符串作为文件名不是正确的做法。:) 如果从上面的内容中你无法准确地找出如何修复代码,请参阅如何创建一个最小、完整和可验证的示例以及我如何提出一个好问题?了解如何改进问题的详细信息,以便提供更好的答案。ReadString()
方法返回的字符串。也许你想把这个字符串附加到其他文件中?也许你确实想以某种方式使用该字符串来生成一个有效的文件名,你会在哪个文件中附加一些不同的