在c#中编辑文本文件,该文件恰好是Illustrator(.ai)文件
我们有数百个Illustrator文件,使用需要更改的字体。我可以在记事本++中打开Illustrator文件,搜索有问题的字体并用新字体替换它。然后在Illustrator中使用正确的字体打开文件,不会出现问题 我正试图编写一些C代码来自动完成这项工作,但Illustrator声称生成的文件已损坏 我假设这是由于文件的编码,所以我尝试用各种不同的编码读取和写入文件,结果基本相同。文件要么根本无法打开,要么是空白的白页。不管怎样,Illustrator说该文件已损坏 经过几次修改后,以下是我目前的代码:在c#中编辑文本文件,该文件恰好是Illustrator(.ai)文件,c#,.net,character-encoding,file-handling,adobe-illustrator,C#,.net,Character Encoding,File Handling,Adobe Illustrator,我们有数百个Illustrator文件,使用需要更改的字体。我可以在记事本++中打开Illustrator文件,搜索有问题的字体并用新字体替换它。然后在Illustrator中使用正确的字体打开文件,不会出现问题 我正试图编写一些C代码来自动完成这项工作,但Illustrator声称生成的文件已损坏 我假设这是由于文件的编码,所以我尝试用各种不同的编码读取和写入文件,结果基本相同。文件要么根本无法打开,要么是空白的白页。不管怎样,Illustrator说该文件已损坏 经过几次修改后,以下是我目前
public void RenameFont()
{
DirectoryInfo directory = new DirectoryInfo(Common.SOURCE_FOLDER);
FileInfo[] files = directory.GetFiles("*.ai", SearchOption.TopDirectoryOnly);
foreach (FileInfo file in files)
{
string fileName = file.Name.Replace(".ai", "");
if (int.TryParse(fileName, out int itemNumber))
{
using (FileStream fs = file.OpenRead())
using (StreamReader reader = new StreamReader(fs, Encoding.GetEncoding(1252)))
{
string line;
using (StreamWriter writer = new StreamWriter(File.Open(Path.Combine(file.DirectoryName, $"new{file.Name}"), FileMode.Create), Encoding.GetEncoding(1252)))
{
while ((line = reader.ReadLine()) != null)
{
foreach (string badFont in Common.SEARCH_FOR)
{
if (line.Contains(badFont))
{
line = line.Replace(badFont, Common.REPLACE_WITH);
}
}
writer.WriteLine(line);
}
writer.Flush();
writer.Close();
}
reader.Close();
}
}
}
}
即使我只是读写文件而不修改字体名称,结果仍然是一样的
编辑:我使用记事本++的“在文件中查找”功能来替换文本。它在不到一分钟的时间内处理了所有文件,它们都在Illustrator中打开,没有问题
grep工具可以更可靠、更容易地完成这项任务。不要再发明轮子了——阿德森 虽然grep工具是个好主意(我仍然不知道为什么我没有想到它)。我意识到Notepad++有一个在文件中查找的功能,可以为我替换文本
我让它浏览了文件夹中的所有文件,并在需要的地方进行了查找/替换。不到一分钟,一切都很顺利。grep工具可以更可靠、更轻松地完成此任务。别再发明轮子了你试过普通ASCII编码吗?或者,在最后一个资源中,以二进制文件的形式打开文件,使用字节,老式的低级语言。@ADyson我觉得很愚蠢。虽然我没有使用grep工具,但我可以使用Notepad++的“在文件中查找”功能来替换文本。像冠军一样工作,不到一分钟。伙计,我觉得自己像个白痴,因为我没想到这一点。