Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中编辑文本文件,该文件恰好是Illustrator(.ai)文件_C#_.net_Character Encoding_File Handling_Adobe Illustrator - Fatal编程技术网

在c#中编辑文本文件,该文件恰好是Illustrator(.ai)文件

在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说该文件已损坏 经过几次修改后,以下是我目前

我们有数百个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++的“在文件中查找”功能来替换文本。像冠军一样工作,不到一分钟。伙计,我觉得自己像个白痴,因为我没想到这一点。