【问题标题】:How to replace characters in many texts files with c# [closed]如何用c#替换许多文本文件中的字符[关闭]
【发布时间】:2017-12-05 09:03:11
【问题描述】:

我正在尝试读取许多文本文件并替换每个文件中的字符,我的代码如下,但是当我返回原始文本文件时,我发现没有任何变化!。另一个问题,如果我想添加引号,即 ("") 到名为 stripchars1 的字符串以被替换 该怎么做?

 string[] Paths = Directory.GetFiles(path,"*.txt");
 string[] stripchars1={"<","?","."};
 string[] chars2={"s","w","n"};

        foreach (string file in Paths)
        {
            TextReader objstream = new StreamReader(file);


            foreach (string character in stripchars1)
            {

                file.Replace(character, " ");

            }

          foreach (string character in chars2)
            {

                file.Replace(character, "h");

            }

        }

【问题讨论】:

  • 您根本没有修改文件。您正在修改文件名,该文件名存储在名为 file 的变量中。
  • 您甚至还没有阅读任何文件。仅仅因为你调用你的变量file 这并不意味着你正在处理一个。你需要看看如何读写文件。
  • @stybl 是的,我认为你是对的,但你知道如何访问每个文件的内容吗?谢谢
  • 尝试先询问强大的谷歌。您可以遵循大量有关 I/O 的指南。
  • @DarrenYoung 我知道读写我的问题是如何修改每个文件的内容来替换

标签: c# text replace text-files


【解决方案1】:

我修复了你的代码,让它能按照你的意图去做。

我使用方法 StreamWriter.ReadToEnd() 将文件的所有内容读入字符串。需要一个额外的 StreamWriter 对象来将结果写入另一个文件,该文件的文件名以 .new 为后缀。请注意

  • 使用 StreamReader 只能读取文件的内容,而不能使用 StreamReader 进行写入。
  • writer-object 需要写入不同的文件,因为该文件已被 StreamReader 打开
  • 使用可确保尽早释放非托管对象。

第二个问题的答案:您可以使用反斜杠 \ 在字符串中添加双引号 (")。

        string[] Paths = Directory.GetFiles(path, "*.txt");
        string[] stripchars1 = { "<", "?", ".","\"" };
        string[] chars2 = { "s", "w", "n" };

        foreach (string file in Paths)
        {
            using (StreamReader objstream = new StreamReader(file))
            {
                using (StreamWriter objstream2 = new StreamWriter(file + ".new"))
                {
                    string s = objstream.ReadToEnd();

                    foreach (string character in stripchars1)
                    {
                        s = s.Replace(character, " ");
                    }

                    foreach (string character in chars2)
                    {
                        s = s.Replace(character, "h");
                    }

                    objstream2.Write(s);
                }
            }
        }

【讨论】:

  • 非常感谢您的回答对我有帮助。
  • 请确认我的回答是正确的。 (绿色复选标记)
  • 我以前也这样做过,但我不知道是什么问题!
【解决方案2】:

试试这个:

    string[] Paths = Directory.GetFiles(path, "*.txt");
    string[] stripchars1 = { "<", "?", "." };
    string[] chars2 = { "s", "w", "n" };

    foreach (string file in Paths)
    {
        var text = File.ReadAllText(file);

        foreach (string character in stripchars1)
        {
            text = text.Replace(character, " ");
        }

        foreach (string character in chars2)
        {
            text = text.Replace(character, "h");
        }

        File.WriteAllText(file, text);
    }

【讨论】:

    【解决方案3】:

    这是同一事物的另一个版本,但增加了对多核线程的一些支持,以及处理处理处置的静态 ReadAllTextWriteAllText 方法的使用内部有自己的流。

        char[] stripchars1 = { '<', '?', '.', '\'' };
        char[] chars2 = { 's', 'w', 'n' };
    
        Parallel.ForEach(Directory.GetFiles(path, "*.txt"), file =>
        {
            File.WriteAllText(string.Format("{0}_new.txt", file), 
                string.Join("", File.ReadAllText(file).Select(c => stripchars1.Contains(c) ? ' ' : chars2.Contains(c) ? 'h' : c)));
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2012-11-21
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      相关资源
      最近更新 更多