保存对通过下拉列表打开的文件的更改

Posted

技术标签:

【中文标题】保存对通过下拉列表打开的文件的更改【英文标题】:Saving changes to file opened via dropdownlist 【发布时间】:2021-09-02 05:47:45 【问题描述】:

所以我在让我的代码工作方面得到了帮助,结果发现我的 Combobox 控件中缺少一些东西。

我想要达到的目标: 我通过下拉列表选择一个文件,一旦选择,我的RichTextBox 会显示整个文件的内容。 我希望能够在这里更改一行,使用RichTextBox,然后我有一个 Save 按钮,一旦我点击这个,我希望我的更改保存到我选择的文件中下拉列表。

到目前为止我的代码:

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

反之亦然。 然后按原样保存文件。

【问题讨论】:

@Dude85:configReader 是做什么的?以及如何将文件内容加载到richTextBox1 configList = 下拉菜单 configReader = Richtextbox saveConfig = 按钮 System.IO.File.WriteAllText(@fileName);引发以下错误:方法'WriteAllText'没有重载需要1个参数因此文件没有被保存。 void LoadconfigList() 是我填充下拉列表的方式 【参考方案1】:

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);
    

【讨论】:

以上是关于保存对通过下拉列表打开的文件的更改的主要内容,如果未能解决你的问题,请参考以下文章

更改下拉列表打开数据模式

下拉列表内容怎么设置?

根据使用 Jexcel 选择的另一个下拉列表更改下拉列表值

如何通过加载保存的搜索功能处理填充下拉列表

mfc如何用txt保存下拉框控件的内容?下拉框如何读入TXT中的内容到属性-数据中?

微信在电脑端下拉会刷新