C#使用更改的文件名从.txt扩展名中删除行

时间:2018-05-31 11:33:06

标签: c# text overwrite

我目前正在尝试在c#中创建一个.exe,我可以将.txt文件拖放到其中以删除包含关键字“CM”和/或“填充”的文本行。它必须能够覆盖现有数据,因此不会创建新文件。除扩展名外,文件名每次都不同。如果数据有任何影响,则数据以制表符分隔。我知道有类似的问题,但我没有设法使它们适应我的需要。此外,我对此非常陌生,我已经尝试了大约一个星期而没有运气。

            if (args.Length == 0)
            return; // return if no file was dragged onto exe
        string text = File.ReadAllText("*.txt");
        text = text.Replace("cm", "");
        string path = Path.GetDirectoryName(args[0])
            + Path.DirectorySeparatorChar
            + Path.GetFileNameWithoutExtension(args[0])
            + "_unwrapped" + Path.GetExtension(args[0]);
        File.WriteAllText("*.txt", text);

\\attempt 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            string concrete = "CM";
            string line;

            using (StreamReader reader = new StreamReader(@"C:\\Users\drocc_000\Desktop\1611AN24T99-041805221704.txt"))
            {
                using (StreamWriter writer = new StreamWriter(@"C:\\Users\drocc_000\Desktop\1611AN24T99-041805221704NEW.txt"))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        // if (String.Compare(line, yourName) == 0)
                        //    continue;

                        writer.WriteLine(line.Replace(concrete, ""));
                    }
                }
            }
\\attempt 2

感谢您的时间。 问候, 丹尼

2 个答案:

答案 0 :(得分:0)

您可以使用下面的代码创建一个控制台应用程序,然后将文本文件拖放到.exe文件中而不打开它。

class Program
{
    static void Main(string[] args)
    {
        if (args.Length > 0 && File.Exists(args[0]))
        {
            string path = args[0];
            EditFile(new List<string>() { "CM", "Filling" }, path);
        }
        Console.Read();
    }

    public static void EditFile(List<string> keyWords, string filename)
    {
        List<string> lines = new List<string>();

        using (StreamReader sr = new StreamReader(filename))
        {
            while (sr.Peek() >= 0)
            {
                lines.Add(sr.ReadLine());
            }
            sr.Close();
        }

        int removedLinesCount = 0;
        bool writeline;
        using (StreamWriter sw = new StreamWriter(filename))
        {
            foreach (var line in lines)
            {
                writeline = true;
                foreach (var str in keyWords)
                {
                    if (line.Contains(str))
                    {
                        writeline = false;
                        removedLinesCount++;
                        break;
                    }
                }

                if (writeline)
                    sw.WriteLine(line);
            }

            Console.WriteLine(removedLinesCount + " lines removed from the file " + filename);
            sw.Close();
        }
    }
}

答案 1 :(得分:0)

这样的东西?

using System;
using System.IO;
using System.Linq;

namespace ConsoleApp1
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            try
            {
                // Get the filename from the applications arguments
                string filename = args[0];

                // Read in all lines in the file.
                var linesInFile = File.ReadLines(filename);

                // Filter out the lines we don't need.
                var linesToKeep = linesInFile.Where(line => !line.Contains("CM") && !line.Contains("Filling")).ToArray();

                // Overwrite the file.
                File.WriteAllLines(filename, linesToKeep);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}