读取文本文件并覆盖更改

时间:2014-02-14 19:42:40

标签: c# openfiledialog

我想在文本文件中同时读写。我怎样才能做到这一点?我在互联网上搜索,但我真的不太了解。在这个动作中,我想使用OpenFileDialog工具。 这是代码:

private void controlla_Click(object sender, EventArgs e)
{
    Regex rgx = new Regex(@"\d");

    if (string.IsNullOrWhiteSpace(text_scrivi.Text) || rgx.IsMatch(text_scrivi.Text))
        MessageBox.Show("Errore. Bisogna inserire una parola");
    else
    {
        string line;
        string sen_text = text_scrivi.Text.Trim();
        //MessageBox.Show(sen_text);
        bool esito = true;
        StreamReader file = new StreamReader(@"%USERPROFILE%\Desktop\Ghilardi\Parole\280000_parole_italiane");
        while ((line = file.ReadLine()) != null && (esito))
        {
            if (string.Compare(line, sen_text) == 0)
            {
                MessageBox.Show("La Parole e' presente nel vocabolario");
                esito = false;
            }

        }
        file.Close();
        if (esito)
        {
            DialogResult scelta = MessageBox.Show("La Parole non è presente nel vocabolario", "Salvare Nuova Parola", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (scelta == DialogResult.No)
                text_scrivi.Text = "";
            else
                **if (scelta == DialogResult.Yes)
                {

                 \\I Want open file, read one line at time, and write in a determined position. I don't know, how open file in read and write modal.    

                }**
                else
                    text_scrivi.Text = "";
        }
    }
}

1 个答案:

答案 0 :(得分:2)

从文件中读取写入的最简单方法是使用File.ReadAllTextFile.WriteAllText但是您不会同时阅读写入。此外,这些方法不会流式传输文件(它会一次性加载到内存中),因此如果您处理大型文件,它们可能会导致OutOfMemoryExceptions,在这种情况下,最佳路由(imo)将使用{{} 1}}和StreamReader

这是一个例子;

StreamWriter

如果您需要转到string file = File.ReadAllText(@".\path\to\file.txt"); file = file + "Some string I'm adding to my file"; File.WriteAllText(@".\path\to\file.txt", file); // note this overwrites the file / StreamReader路线,我建议您只查看MSDN上的示例。

http://msdn.microsoft.com/en-us/library/system.io.streamreader(v=vs.110).aspx

编辑:从OP在评论中所说的内容我认为StreamWriter是一个更好的选择,这是一个例子;

ReadAllLines

注意,当用户“编辑文件”时,他们不直接编辑文件。你有一个内存(RAM)中的hte文件的副本,用户正在编辑它。用户完成后,使用内存中的版本覆盖整个文件。为了完成这项任务,没有理由同时读写。

如果文件太大而无法使用string[] lines = File.ReadAllLines(@".\path\to\file.txt"); foreach (int i = 0; i < lines.Length; i++) { string forUser = lines[i]; // show user the line and let them edit it; // somethign like forUser = myTextBoxOrWhatever.Text; // do validation if yo uwant lines[i] = forUser; // this updates your version of the file with the users changes // update display if need be } File.WriteAllLines(@".\path\to\file.txt", lines); // this will overwrite the file with the new version ,则问题会变得更加复杂。这样做的方法是用ReadAllLines逐行读取它,将输出逐行写入临时文件StreamReader然后在完成后删除原始文件并更改临时文件的名称。