在文本文件的顶部添加一行
我的应用程序提取数据并将其附加到文本文件,但我需要找出如何以编程方式查看文本文件的第一行,看它是否与以下文本匹配:
日期时间,VirtualIP,VirtualPort,VirtualName,DestinationIP,DestPort,状态,期望
如果确实如此,那么继续执行正常function(下面的代码段),如果第一行与上面不同,那么我想在第一行插入上面的内容而不覆盖当前的那些。 我怎样才能做到这一点? (基本上把所有东西都按下了一行,这样我就可以在第一行添加我想要的东西了)…顺便说一句,它被保存为可以在excel中打开的csv文件。
try { // ... for (int j = 0; j < memberStatus.Result.Count; j++) { VirtualMemberStatus status = memberStatus.Result[j]; //text += String.Format("Name: {4}, Member: {0}:{1}, Status: {2}, Desired: {3}" + Environment.NewLine, status.Member.Address, status.Member.Port, status.EffectiveStatus, status.DesiredStatus, virtualKey.Key); text += String.Format("{5},{4},{0},{1},{2},{3}" + Environment.NewLine, status.Member.Address, status.Member.Port, status.EffectiveStatus, status.DesiredStatus, virtualKey.Key.Replace(":", ","), DateTime.UtcNow); } } catch { //ERROR CODE 2 //MessageBox.Show("Error occurred, check device name (case senstive) and admin group. This error may also occur due to connection loss, try again."); errors += String.Format("{0} Error Code: 2, Error occurred, check device name (case senstive) and admin group. This error may also occur due to connection loss, try again." + Environment.NewLine, DateTime.UtcNow); } this.resultsTextBox.Text = text;
这个文件不会被删除很多但是如果它确实发生了,我希望它在顶部有正确的列名。 即:
DateTime,VirtualIP,VirtualPort,VirtualName,DestinationIP,DestPort,Status,Desired
您需要重写整个文件。
- 打开一个新的(临时!)文件
- 写标题行
- 对于每个输入行,写入行(如果考虑性能,请考虑块缓冲)
- 刷新并关闭输出文件
- 只有在没有错误的情况下,才能就地移动临时文件(通过重命名)。
当过程中途出现(IO)错误时,此过程可以防止出现问题
这是执行此类操作的代码:
using (var input = new StreamReader("input.txt")) using (var output = new StreamWriter("input.txt.temp")) { output.WriteLine("headerline"); // replace with your header :) var buf = new char[4096]; int read = 0; do { read = input.ReadBlock(buf, 0, buf.Length); output.Write(buf, 0, read); } while (read > 0); output.Flush(); output.Close(); input.Close(); } File.Replace("input.txt.temp", "input.txt", "input.txt.backup");
请注意,示例代码甚至可以创建备份。 一个可能的改进点是明确地实例化FileStream(...., FileMode.CreateNew)
,以防止在该名称已存在的文件时覆盖临时文件。
另一种解决方案是使用System.IO.Path.GetTempFileName()
。 但是,然后File.Replace
可能不再是高效和primefaces的,因为tempfolder可能在另一个卷/文件系统上。
你需要搜索到第一个位置,看它是否算出这些单词,这个代码片段可以实现你想要的东西。
上述就是C#学习教程:在文本文件的顶部添加一行分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Dim filePath As String = "file.txt" Dim bufferSize As Integer = 8129 Dim textToMatch As String = "DateTime,VirtualIP,VirtualPort,VirtualName,DestinationIP,DestPort,Status,Desired" Dim textByte As Byte() = ASCIIEncoding.ASCII.GetBytes(text) Dim buffer As Byte() = Nothing Dim fs As FileStream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite) fs.Read(buffer, 0, bufferSize) Dim i As Int32 = fs.Seek(0, SeekOrigin.Begin) fs.Position = i If fs.Position.Equals(textToMatch) Then Else fs.Write(textByte, 0, textByte.Length) End If fs.Flush() fs.Close()
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/962300.html