我有一个文本文件,上面写着这样的内容:
#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个非金发女郎-Whats Up.txt在同一个文件夹中有一个MP3文件,在这个例子中是:4非金发女郎-Whats Up.MP3
我想要的是更换线路:
#MP3:Four Non Blondes - Whats Up.mp3
进入这一行:
#MP3:4 Non Blondes - Whats Up.mp3
每一条MP3线路的前面都有这样的:
#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);
}
}
}
}
由于.txt文件的文件名是[Songname].txt
,您可以使用Path.GetFilenameWithoutExtension(files[i])来获取[Songname]
。然后用filename+".MP3"替换#MP3行。现在写出文件。
注意:你可能会想复制你正在处理的目录,以防出现问题。
我知道我参加聚会迟到了,但这里有一个例子。
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);
}
}
}
}
我会同时打开一个流读取器和一个流写入器(使用不同的文件名),一次一行地浏览每个文件,搜索需要进行的任何更改。您可以使用Multiselect=true的openfiledialog选择文件名,也可以在命令提示符窗口中运行此命令,生成一个文本文件粘贴到代码中,并在其周围加引号作为字符串数组实例化的初始值。
dir*.mp3/b>filenames.txt
string[] array = new string[] {"file0.mp3",
"file1.mp3",
"file2.mp3",
"file3.mp3",
"file4.mp3",
"file5.mp3"};