我想在文本文件中同时读写。我怎样才能做到这一点?我在互联网上搜索,但我真的不太了解。在这个动作中,我想使用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 = "";
}
}
}
答案 0 :(得分:2)
从文件中读取写入的最简单方法是使用File.ReadAllText
和File.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
然后在完成后删除原始文件并更改临时文件的名称。