【发布时间】:2018-04-13 03:35:24
【问题描述】:
我已经进行了一个月左右的编码之旅,目前正在编写我的第一个程序。它允许将代码 sn-ps 保存和组织到一个易于搜索的库中。 Screenshot
我目前使用两个列表来存储数据(一个用于条目名称,另一个用于条目内容),我已经能够通过向每个详细信息行添加标签来保存和加载到文本文件保存。即使是新手,这似乎也很笨拙。我决定尝试使用逐字字符串将多行文本框保存为单行字符串。不过,我似乎无法弄清楚,因为它似乎将每一行保存到文本文件中的新行中,这破坏了我的加载文件功能。在这种情况下,我是否假设逐字字符串将是要走的路,还是我完全错过了一些东西?
public void SaveCurrentLibrary() {
SaveFileDialog saveDialog = new SaveFileDialog(); //instantiates a new dialog box
saveDialog.Filter = "Code Locker File (*.cll)|*.cll|All files (*.*)|*.*";
saveDialog.InitialDirectory = appDir;
//ConvertDetailsForSaving(); commented out for testing
saveDialog.ShowDialog();
var fileName = saveDialog.FileName;
MessageBox.Show(fileName);
System.IO.File.WriteAllLines(fileName, listOfEntries);
System.IO.File.AppendAllLines(fileName, listOfDetails);
}
private void LoadLibrary() {
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "Code Locker Files (*.cll)|*.cll|All files (*.*)|*.*";
openDialog.InitialDirectory = appDir;
openDialog.ShowDialog();
var fileName = openDialog.FileName;
List<string> lines = new List<string>();
using (StreamReader r = new StreamReader(fileName)) {
string line;
while ((line = r.ReadLine()) != null) {
if(line.StartsWith("[")) {
listOfDetails.Add(line);
} else {
listOfEntries.Add(line);
lstEntries.Items.Add(line);
}
}
}
}
//Function on AddEntry form to send data to main window
private void SendDataToMain() {
main.lstEntries.Items.Add(txtName.Text);
main.listOfEntries.Add(txtName.Text);
main.listOfDetails.Add(@"[" + txtName.Text + "]" + txtContents.Text);
main.lstEntries.SelectedIndex = 0;
this.Close();
}
【问题讨论】:
-
“我决定尝试使用逐字字符串将多行文本框保存为单行字符串” 这真的不是逐字字符串。逐字字符串 (
@"some\nstring") 是代码编辑器中的一个概念,它告诉编译器将以下字符串视为逐字字符串(不评估转义序列)。 -
@RonBeyer 这就是他想要的文件。这样多行 sn-p 将只占用一行
-
这正是我所追求的 Keith。今天下班后我得试一试。谢谢。
标签: c# io text-files verbatim-string