保存对通过下拉列表打开的文件的更改
Saving changes to file opened via dropdownlist
所以我得到了帮助让我的代码工作,结果我的 Combobox 控件中缺少一些东西。
我想要达到的目标:
我通过下拉列表选择一个文件,一旦选择,我的 RichTextBox
就会显示整个文件的内容。
我希望能够在此处更改一行,使用 RichTextBox
,然后我有一个 保存 按钮,单击此按钮后,我希望将更改保存到文件中我已经通过下拉列表选择了。
到目前为止我的代码:
public ConfigChanger()
{
InitializeComponent();
LoadconfigList();
this.configList.SelectedIndexChanged += new System.EventHandler(this.configList_SelectedIndexChanged);
}
void LoadconfigList()
{
configList.Items.Clear();
string[] files = Directory.GetFiles(@"d:\monitors.d\");
foreach (string file in files)
configList.Items.Add(Path.GetFileNameWithoutExtension(file));
}
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
string filePath = Path.Combine(@"d:\monitors.d\", fileName + ".yml");
if (File.Exists(filePath))
configReader.AppendText(File.ReadAllText(filePath));
else
configReader.Clear();
}
这是我无法正常运行的部分
private void saveConfig_Click_1(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
richTextBox1.AppendText(configReader.Text);
System.IO.File.WriteAllText(@fileName);
}
我不知道如何保存我想要的更改。
我想做的改变只是配置文件中的这一行:
docMeta.DownAcknowledge: False
并将其更改为
docMeta.DownAcknowledge: True
反之亦然。
然后按原样保存文件。
WriteAllText()
方法有两个参数:要写入的文件和要写入文件的字符串。
尝试在您的代码中进行以下更改:
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
string filePath = Path.Combine(@"d:\monitors.d\", fileName + ".yml");
richTextBox1.Clear();
if (File.Exists(filePath))
{
richTextBox1.AppendText(File.ReadAllText(filePath));
}
}
private void saveConfig_Click(object sender, EventArgs e)
{
string file = Path.Combine(@"d:\monitors.d\", configList.SelectedItem + ".yml");
File.WriteAllText(file, richTextBox1.Text);
}
我会更改上面的代码以在组合框项中保留完整路径和文件名。此后,您无需在代码的多个位置使用 [disk:\directory\filename.ext] 进行操作。这样会让代码更完整。
例如,它可能看起来像这样:
public class FileItem // Class to encapsulate the file name and full path
{
public string FileName { get; set; }
public string FullPathName { get; set; }
}
您方法的变化:
void LoadconfigList()
{
IList<FileItem> fileList = new List<FileItem>();
string[] files = Directory.GetFiles(@"d:\monitors.d\");
foreach (string file in files)
{
fileList.Add(new FileItem() { FileName = Path.GetFileNameWithoutExtension(file), FullPathName = file});
}
configList.Items.Clear();
configList.DataSource = fileList;
configList.DisplayMember = "FileName";
configList.ValueMember = "FullPathName";
}
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
if (configList.SelectedItem is FileItem file)
{
richTextBox1.Clear();
if (File.Exists(file.FullPathName))
{
richTextBox1.AppendText(File.ReadAllText(file.FullPathName));
}
}
}
private void saveConfig_Click(object sender, EventArgs e)
{
if (configList.SelectedItem is FileItem file)
{
File.WriteAllText(file.FullPathName, richTextBox1.Text);
}
}
所以我得到了帮助让我的代码工作,结果我的 Combobox 控件中缺少一些东西。
我想要达到的目标:
我通过下拉列表选择一个文件,一旦选择,我的 RichTextBox
就会显示整个文件的内容。
我希望能够在此处更改一行,使用 RichTextBox
,然后我有一个 保存 按钮,单击此按钮后,我希望将更改保存到文件中我已经通过下拉列表选择了。
到目前为止我的代码:
public ConfigChanger()
{
InitializeComponent();
LoadconfigList();
this.configList.SelectedIndexChanged += new System.EventHandler(this.configList_SelectedIndexChanged);
}
void LoadconfigList()
{
configList.Items.Clear();
string[] files = Directory.GetFiles(@"d:\monitors.d\");
foreach (string file in files)
configList.Items.Add(Path.GetFileNameWithoutExtension(file));
}
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
string filePath = Path.Combine(@"d:\monitors.d\", fileName + ".yml");
if (File.Exists(filePath))
configReader.AppendText(File.ReadAllText(filePath));
else
configReader.Clear();
}
这是我无法正常运行的部分
private void saveConfig_Click_1(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
richTextBox1.AppendText(configReader.Text);
System.IO.File.WriteAllText(@fileName);
}
我不知道如何保存我想要的更改。 我想做的改变只是配置文件中的这一行:
docMeta.DownAcknowledge: False
并将其更改为
docMeta.DownAcknowledge: True
反之亦然。 然后按原样保存文件。
WriteAllText()
方法有两个参数:要写入的文件和要写入文件的字符串。
尝试在您的代码中进行以下更改:
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
string fileName = (string)configList.SelectedItem;
string filePath = Path.Combine(@"d:\monitors.d\", fileName + ".yml");
richTextBox1.Clear();
if (File.Exists(filePath))
{
richTextBox1.AppendText(File.ReadAllText(filePath));
}
}
private void saveConfig_Click(object sender, EventArgs e)
{
string file = Path.Combine(@"d:\monitors.d\", configList.SelectedItem + ".yml");
File.WriteAllText(file, richTextBox1.Text);
}
我会更改上面的代码以在组合框项中保留完整路径和文件名。此后,您无需在代码的多个位置使用 [disk:\directory\filename.ext] 进行操作。这样会让代码更完整。
例如,它可能看起来像这样:
public class FileItem // Class to encapsulate the file name and full path
{
public string FileName { get; set; }
public string FullPathName { get; set; }
}
您方法的变化:
void LoadconfigList()
{
IList<FileItem> fileList = new List<FileItem>();
string[] files = Directory.GetFiles(@"d:\monitors.d\");
foreach (string file in files)
{
fileList.Add(new FileItem() { FileName = Path.GetFileNameWithoutExtension(file), FullPathName = file});
}
configList.Items.Clear();
configList.DataSource = fileList;
configList.DisplayMember = "FileName";
configList.ValueMember = "FullPathName";
}
private void configList_SelectedIndexChanged(object sender, EventArgs e)
{
if (configList.SelectedItem is FileItem file)
{
richTextBox1.Clear();
if (File.Exists(file.FullPathName))
{
richTextBox1.AppendText(File.ReadAllText(file.FullPathName));
}
}
}
private void saveConfig_Click(object sender, EventArgs e)
{
if (configList.SelectedItem is FileItem file)
{
File.WriteAllText(file.FullPathName, richTextBox1.Text);
}
}