c#修改文件内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#修改文件内容相关的知识,希望对你有一定的参考价值。

一个文件夹里有N个TXT,修改TXT里的内容如
//TXT格式
%,MX--,
G00 G53 S15000M03M09
G17G90G71
G54
G43D1
G04K500
G51E0.005
G00X0.Y0.
T0 (JD-0.65)
G00X-8.032Y-16.601Z5.000
Z2.020
现在要做的就是在TO前面加个符号
高手帮帮忙,在线等, T0 (JD-0.65)这一行是固定的
string dirp=textBox1.Text; DirectoryInfo mydir = new DirectoryInfo(dirp);

foreach (FileSystemInfo fsi in mydir.GetFileSystemInfos())
if (fsi is FileInfo) FileInfo fi = (FileInfo)fsi;
string x=System.IO.Path.GetDirectoryName(fi.FullName);
Console.WriteLine(x); string s=System.IO.Path.GetExtension(fi.FullName);
string y=System.IO.Path.GetFileNameWithoutExtension(fi.FullName);
Console.WriteLine(y); string data = x + @"\" + y + s;
if(s==".TXT")FileStream fs = new FileStream(data, FileMode.Open);
StreamReader m_streamReader = new StreamReader(fs);
m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
string strLine = m_streamReader.ReadToEnd();
//就在这里不知道怎么写

  c#修改文件内容,参考代码如一下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using BarCode.Logs;
namespace BarCode.Else

    public partial class EventRecord : Form
    
        string path = Application.StartupPath + "\\\\Else\\\\Memorandum.ini";
        public EventRecord()
        
            InitializeComponent();
        
        private void EventRecord_Load(object sender, EventArgs e)
        
            file_open();
        
        private void file_open()
        
            //打开系统日志文件
            if (!File.Exists(path))
            
                // 目录/文件不存在,建立目录/文件 
                File.CreateText(path);
            
            //打开文件
            //FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            //通过指定字符编码方式可以实现对汉字的支持,否则在用记事本打开查看会出现乱码 
            StreamReader m_streamReader = new StreamReader(path, System.Text.Encoding.GetEncoding("GB2312"));
            //使用StreamReader类来读取文件
            m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
            // 从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容
            this.richTextRecord.Text = "";
            string strLine = m_streamReader.ReadLine();
            while (strLine != null)
            
                this.richTextRecord.Text += strLine + "\\n";
                strLine = m_streamReader.ReadLine();
            
            //关闭此StreamReader对象
            m_streamReader.Close();
        
        private void button1_Click(object sender, EventArgs e)
        
            SaveToTxtFile();
        
        /// <summary>
        /// 保存文件
        /// </summary>
        private void SaveToTxtFile()
        
            //int buffer = 1024;
            //创建一个文件流,用以写入或者创建一个StreamWriter
            //FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            //通过指定字符编码方式可以实现对汉字的支持,否则在用记事本打开查看会出现乱码 
            /*改函数很重要由于要将修改的内容覆盖原来的文件内容故设第二个参数为false,
            同时还不能用其他类如FileString来操作文件(多线程占用,不能覆盖修改文件)
             * 例如:new StreamWriter(fs, true, Encoding.GetEncoding("GB2312"));是错误的*/
            StreamWriter m_streamWriter = new StreamWriter(path, false, Encoding.GetEncoding("GB2312"));
            m_streamWriter.Flush();
            // 使用StreamWriter来往文件中写入内容
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin);
            // 把richTextBox1中的内容写入文件
            m_streamWriter.Write(richTextRecord.Text);
            //关闭此文件
            m_streamWriter.Flush();
            m_streamWriter.Close();
            this.labwarm.Text = "保存成功!";
        
        private void button2_Click(object sender, EventArgs e)
        
        
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        
            this.labwarm.Text = "正在编辑文本";
        
        private void button3_Click(object sender, EventArgs e)
        
            SavefileAs();
        
        /// <summary>
        /// 另存为
        /// </summary>
        private void SavefileAs()
        
            SaveFileDialog savefile = new SaveFileDialog();
            //提示用户选择保存文件(默认为桌面) 
            savefile.InitialDirectory = @"C:\\Documents and Settings\\Administrator\\桌面";
            //打开文件的初始目录 
            savefile.Filter = "备忘录 (*.txt)|";
            savefile.FileName = "Memorandum";
            //格式转换如此简单 
            savefile.DefaultExt = ".txt";
            //设置或获取文件后缀 
            DialogResult dr = savefile.ShowDialog();
            if (dr == DialogResult.OK)
            
                String filePath = savefile.FileName.ToString();
                try
                
                    File.Copy(path, filePath, true);
                
                catch (Exception e1)
                 (new Clogs()).LogError("错误信息", e1); return; 
            
        
    
参考技术A string str="读取的txt内容字符串";
//对str 字符串进行操作,(截取,替换,拼接等操作)
string newStr=""最终字符串;
将newStr再次写入到txt文件中

将上面的过程写在一个循环中,循环次数是文件个数,这样就可以了
参考技术B 你代码写得太乱了,繁琐累赘,我就接着你的代码写吧
string NewContent =strLine.Replace("T0 (JD-0.65)","<替换字符>");
byte[] buffer =System.Text.Encoding.Default.GetBytes(NewContent);
FileStream fs1 = new FileStream("<文件路径>",FileMode.Create,FileAccess.Write);//存在会覆盖,不提示
fs1.Write(buffer, 0, buffer.Length);
fs1.Close();
//思路就是把内容取出来后换上新的字符串,再把新的内容覆盖旧的文件,就这么简单追问

好啦,还有一个小问题,如果我点二下;;TO (JD-0.65)就多了;我要怎么判断呢?

追答

给你点提示吧
string temp="T0 (JD-0.65)";
if (strLine.IndexOf(temp)!=strLine.LastIndexOf(temp)) //说明有多个匹配项
//字符串拼接,用substring方法,我也不知道你是往前加或是往或加字符,我就不写了

参考技术C static void Main(string[] args)

ReplaceText("T0 (JD-0.65)", "@BT0 (JD-0.65)");
Console.Read();

public static void ReplaceText(string oldValue, string newValue)

DirectoryInfo dir = new DirectoryInfo(@"C:\Users\Administrator\Desktop");
FileSystemInfo[] fileArr = dir.GetFileSystemInfos("*.txt");
foreach (var f in fileArr)

if (!(f is FileInfo)) continue;
ReplaceText(f.FullName, oldValue, newValue);


/// <summary>
/// 替换某个文本文件中的特定内容
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="oldValue"></param>
/// <param name="newValue"></param>
public static void ReplaceText(string path, string oldValue, string newValue)

string text = string.Empty;
using (StreamReader reader = new StreamReader(path, Encoding.Default))

text = reader.ReadToEnd();
reader.Close();

using (StreamWriter writer = new StreamWriter(path, false))

writer.Write(text.Replace(oldValue, newValue));
writer.Close();

本回答被提问者采纳
参考技术D 一行一行读出来放到数组里面,如果读出的行等于T0 (JD-0.65),则替换为你要的值,然后再按行回写数组

c#读取.config文件内容

今天在做项目的时候,由于程序同时启动多种情况的数据,测试分为多个人,就需要把数据分离开来,于是用了一个临时的配置文件,让测试在配置文件修改相应数据从而让各个测试互相不影响!

步骤:

第一步:添加一个App.config文件,文件格式如下:

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <appSettings>
    <add key="canshu" value="HKG999$sha777!1002*1003#sha888!0001*0002"/>
  </appSettings>
</configuration>

这是我测试时候使用的一个例子!

第二歩:将文件添加在了项目中。

最开始我使用的是这种方法来读取:

string ceshi =ConfigurationManager.AppSettings["canshu"];

 

注意:需要在资源管理器的引用里面,添加System.Configuration,然后再在代码中添加 using System.Configuration;

 

现在问题来了,如果你的这个App.config的配置文件没有在你的启动项的目录下面,这样就拿不到你想要的数据,返回一个null。

解决办法:(获取绝对路径下面的配置文件数据)

下面这种方法使用性比较好一些:

 

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"App.config";   ////(@""引号里面的是你的配置文件的在程序的绝对路径)。
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
string ceshi = config.AppSettings.Settings["canshu"].Value;

这样的方式就获取到了想要的数据!希望遇到同样问题的跟我一样的初学者能得到帮助!

 

以上是关于c#修改文件内容的主要内容,如果未能解决你的问题,请参考以下文章

C#如何利用itextSharp修改现有PDF文件内容,比如插入

c#读取.config文件内容

C# 文件操作

您可以在 Java 中获得的最接近 C# 内部修改的内容是啥?

C#中能不能用datagridview显示文件的内容?不用数据库

wpf c# xml修改的方法