我有一个显示文件路径列表的程序(列表视图)。当您单击包含文件路径的任何列表项时,它会将其分配给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());
}
我是学生,所以在学习的过程中,我也愿意接受更好的方法。感谢。
答案 0 :(得分:2)
您的代码执行以下操作:
ListView
对象获取文件的名称。ReadString()
方法。ReadString()
方法然后从给定文件中读取所有二进制数据。__byteLookup
的数组将二进制数据转换为字符串(可能是十六进制字符串值或类似的数组)。File.AppendText()
方法。在第5步,有两个严重的问题:
AppendText()
方法的返回值,这就是让你实际追加的东西(即通过使用返回的StreamWriter
来写一些东西到文件)。但更糟糕的是:
__byteLookup
的声明,就不可能确切地说出文件名的非法字符。但很容易说,那里必须有某些东西无效。不幸的是,你的问题中没有足够的细节来确切知道你的意图。即你似乎想要将文本附加到某个文件。但是,我不能说,可能是什么文件。我也不能说你应该如何追加文本。从您的问题中不清楚您希望如何实际使用从ReadString()
方法返回的字符串。也许您打算将该字符串附加到其他文件中?也许你确实想要以某种方式使用该字符串来生成一个有效的文件名,你要在哪个文件中添加一些不同的文本?根本不清楚。
唯一明确的是使用该字符串作为文件名是不正确的。 :)
如果从上面您无法弄清楚如何修复代码,请参阅How to create a Minimal, Complete, and Verifiable example和How do I ask a good question?,了解有关如何改进问题的详细信息,以便提供更好的答案。