【问题标题】:Replacing one specific line in a textfile in c# [duplicate]在c#中替换文本文件中的一个特定行[重复]
【发布时间】:2013-11-27 19:27:00
【问题描述】:

我有一个文本文件这样说:

#TITLE:What's Up
#ARTIST:4 Non Blondes - Whats Up
#MP3:Four Non Blondes - Whats Up.mp3
#COVER:4 Non Blondes - Whats Up [CO].jpg
#BACKGROUND:4 Non Blondes - Whats Up [CO].jpg
#BPM:135
#GAP:32100

它被保存为 4 Non Blondes - Whats Up.txt 在同一个文件夹中有一个 MP3 文件,在这个例子中是:4 Non Blondes - Whats Up.mp3

我想要的是替换行:

#MP3:Four Non Blondes - Whats Up.mp3

进入这一行:

#MP3:4 Non Blondes - Whats Up.mp3

每个 MP3 行前面都有 this:

#MP3:[Songname].mp3

我知道我可以手动执行此操作,但我有 2k 个这样的文件,它们都需要链接到正确的 mp3 文件。我正在 C# 中尝试这个,但没有运气。

这是我迄今为止尝试过的:

private static void testMethod(string path)
    {
        var x = System.IO.Directory.GetDirectories(path);
        foreach (var directory in x)
        {
            string[] mp3Files = System.IO.Directory.GetFiles(directory, "*.mp3");
            string[] txtFiles = System.IO.Directory.GetFiles(directory, "*.txt");
            string MP3FileNameWithExtensions = System.IO.Path.GetFileName(mp3Files[0]);
            Console.WriteLine(txtFiles[0]);
            var lines = System.IO.File.ReadAllLines(txtFiles[0]);
            for (int i = 0; i < lines.Length; i++)
            {
                if(lines[i].Contains("#MP3")){
                    Console.WriteLine("Jeeeej working");
                    lines[i] = "#MP3:"+MP3FileNameWithExtensions;
                    System.IO.File.WriteAllLines(txtFiles[0], lines);
                }
            }
        }
    }

【问题讨论】:

  • 您仍然可以使用 Notepad++ 手动执行此操作,它会搜索和替换文件夹中的多个文件
  • 问题是,我有 1 个根文件夹,它被分隔在每首歌曲的文件夹中,包含 mp3 文件和 txt 文件。程序的其余部分已经用 c# 编写了,所以是的......
  • 那么,您想从#ARTIST 行中获取值并将其放入#MP3 行并附加.mp3 吗?你能告诉我们你到目前为止尝试过的代码吗? (请编辑您的问题以包含代码。)
  • @Baklap4 - Notepad++ 也可以在子文件夹中进行自动搜索和替换。
  • @JonSkeet 我不知道行号太糟糕了 :( 因为这只是一个示例文件

标签: c# file text .net file.readalllines


【解决方案1】:

由于.txt文件的文件名为[Songname].txt,所以可以使用Path.GetFilenameWithoutExtension(files[i])获取[Songname]。然后将#MP3 行替换为文件名+“.mp3”。现在写出文件。

注意您可能需要制作您正在处理的目录的副本,以防万一出现问题。

【讨论】:

  • 谢谢 :) 通过添加我的解决方案修复了答案 :)
  • 我不能,就在那里使用 i,此外,我确定每个文件夹中只有 1 个 txt 文件 :)
  • 哎呀-我做得很好;)
  • 咳咳,犯错是人性的;P
【解决方案2】:

我知道我迟到了,但这里有一个例子。

public void FixTheFiles(String startFolderPath)
        {
            foreach (String dirName in Directory.GetDirectories(startFolderPath))
            {
                FixTheFiles(dirName);
            }
            foreach (String fileName in Directory.GetFiles(startFolderPath))
            {
                FileInfo fi = new FileInfo(fileName);
                if (fi.Extension.Equals("MP3"))
                {
                    String fileContents = "";
                    using (StreamReader sr = new StreamReader(File.Open(fileName.Replace(".mp3",".txt"),FileMode.Open)))
                    {
                        String currentLine = sr.ReadLine();
                        if (currentLine.StartsWith("#MP3:"))
                        {
                            currentLine = "#MP3:" + fileName.Substring(fileName.LastIndexOf('\\')+1);
                        }
                        fileContents += currentLine;
                    }
                    using (StreamWriter sw = new StreamWriter(File.Open(fileName.Replace(".mp3",".txt"),FileMode.Open)))
                    {
                        sw.Write(fileContents);
                    }
                }
            }
        }

【讨论】:

    【解决方案3】:

    我会同时打开一个流读取器和一个流写入器(使用不同的文件名),并一次一行地浏览每个文件,以搜索您需要进行的任何更改。您可以使用带有 Multiselect = true 的 openfiledialog 选择文件名,或在命令提示符窗口中运行此命令以生成文本文件以粘贴到您的代码中,并在它们周围加上引号作为字符串数组实例化的初始值。

    dir *.mp3 /b > 文件名.txt

        string[] array = new string[] {"file0.mp3",
                                            "file1.mp3",
                                            "file2.mp3",
                                            "file3.mp3",
                                            "file4.mp3",
                                            "file5.mp3"};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2013-11-01
      相关资源
      最近更新 更多