当前位置: 首页 > 编程语言 > C#

在C#中将文本添加到文件的开头和结尾分享

时间:2023-04-10 21:12:42 C#

C#学习教程:在C#中将文本添加到文件的开头和结尾我将xml放在引号中的原因是文件中的文本没有使xml无效的根元素。在我的处理中,我想纠正这个并打开每个文件,在每个文件的开头和结尾添加一个根节点,然后关闭它。这是我的想法,但这涉及打开文件、读取整个文件、标记节点,然后写出整个文件。这些文件的大小可能超过20MB。foreach(FileInfofileinfiles){//打开文件StreamReadersr=newStreamReader(file.FullName);//添加开始和结束标签stringtext=""+sr.ReadToEnd()+"";sr.Close();//现在打开同一个文件来写入StreamWritersw=newStreamWriter(file.FullName,false);sw.Write(文本);sw.Close();}有什么建议么?为避免将整个文件保留在内存中,请重命名原始文件,然后使用StreamReader打开它。然后使用StreamWriter打开原文件名创建新文件。将前缀写入文件,然后将大部分数据从读取器复制到写入器。传输所有数据后,写下结束语(如果您希望它是XML,请注意正斜杠)。然后关闭这两个文件并删除重命名的原始文件。字符[]缓冲区=新字符[10000];字符串renamedFile=file.FullName+".orig";File.Move(file.FullName,renamedFile);使用(StreamReadersr=newStreamReader(renamedFile))使用(StreamWritersw=newStreamWriter(file.FullName,false)){sw.Write("");诠释阅读;while((read=sr.Read(buffer,0,buffer.Length))>0)sw.Write(buffer,0,read);sw.Write("");}File.Delete(重命名文件);20MB不是很多,但是当您将其作为字符串读出时,它将使用大约40MB的内存。这也不是很多,但它是你不需要做的处理。您可以将其视为原始字节以减少内存使用并避免解码和重新编码数据:byte[]start=Encoding.UTF8.GetBytes("");byte[]ending=Encoding.UTF8.GetBytes("");byte[]data=File.ReadAllBytes(file.FullName);intbom=(data[0]==0xEF)?3:0;使用(FileStreams=File.Create(file.FullName)){if(bom>0){s.Write(data,0,bom);}s.Write(start,0,start.Length);s.Write(数据,bom,data.Length-bom);s.Write(ending,0,ending.Length);如果您需要更多地重复使用内存,请按照Earwicker的建议使用第二个文件。编辑:添加代码来处理BOM(字节顺序标记)。我看不到任何真正的改进……这有点令人失望。由于无法“移动”文件,因此您总是必须在整个文件中移动字节才能在顶部注入任何内容。通过使用原始流而不是StreamReader,您可能会发现一些性能优势,后者必须实际将流解析为文本。如果它是C#你不想这样做,那么在命令行或批处理文件中很容易做到。ECHO^>outfile.xmlTYPEtemp.xml>>outfile.xmlECHO^>>outfile.xml这将假设您有一些现有的流程来获取您可以挂钩的数据文件。以上就是C#学习教程:在C#文件开头和结尾添加文本分享的所有内容,如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: