-2

Visual Studio を使用して、ネットワーク バージョン 5.0 でコンソール アプリを作成しようとしています。目的は、ディレクトリ内のすべての PNG ファイルを読み取り、コードで JSON ファイルを作成することです。

{
    "format_version": "1.16.100",
    "minecraft:texture_set": {
        "color": "*Filename*",
        "metalness_emissive_roughness": "*Filename_mer*"
    }
}

初期化。はい、これはマインクラフト用です。filename と filename_mer はコードによって自動的に入力されますが、それは私の問題ではありません。

    static void Main(string[] args)
    {
        Console.WriteLine("Goto " + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Packages\\Microsoft.MinecraftUWP_8wekyb3d8bbwe\\LocalState\\games\\com.mojang\\resource_packs" + " And find the resource pack you want to generate files into");
        string pathname = Console.ReadLine();
        #region Message
        Console.WriteLine();
        Console.WriteLine("Looking for folder...");
        #endregion
        string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Packages\\Microsoft.MinecraftUWP_8wekyb3d8bbwe\\LocalState\\games\\com.mojang\\resource_packs\\" + pathname + "\\textures";
        #region Message
        Console.WriteLine();
        Console.WriteLine("Folder found in");
        Console.WriteLine(path);
        #endregion
        string[] directories = Directory.GetDirectories(path);
        foreach (string paths in directories)
        {
            string[] files = Directory.GetFiles(paths);
            foreach (string file in files)
            {
                string filenameWithType = file.Substring(file.LastIndexOf("\\") + 1);
                string filename = filenameWithType.Substring(0, filenameWithType.LastIndexOf("."));
                string thisPath = file.Substring(0, file.LastIndexOf("\\"));
                if (filenameWithType.Substring(filenameWithType.LastIndexOf(".") + 1) == "png")
                {
                    string newPath = thisPath + "\\" + filename + ".texture_set.json";
                    File.Create(newPath);
                    List<string> codeInFile = new List<string>();
                    codeInFile.Clear();
                    codeInFile.Add("{");
                    codeInFile.Add("\"format_version\": \"1.16.100\",");
                    codeInFile.Add("\"minecraft:texture_set\": {");
                    codeInFile.Add("\"color\": \"" + filename + "\",");
                    codeInFile.Add("\"metalness_emissive_roughness\": \"" + filename + "_mer\"");
                    codeInFile.Add("}");
                    codeInFile.Add("}");
                    TextWriter tw = new StreamWriter(newPath, false);
                    foreach (string line in codeInFile)
                    {
                        tw.WriteLine(line);
                        Console.WriteLine(line);
                    }
                    tw.Close();
                    string newPathtxt = thisPath + "\\" + filename + "_mer.png";
                    Bitmap bitmap = new Bitmap(file);
                    using (Bitmap b = new Bitmap(bitmap.Width, bitmap.Height))
                    {
                        using (Graphics g = Graphics.FromImage(b))
                        {
                            g.Clear(Color.Green);
                        }
                        b.Save(newPathtxt, ImageFormat.Png);
                    }
                }
            }
        }
        #region Message
        Console.WriteLine("");
        Console.WriteLine("All done, Your good to go!");
        #endregion
        Console.Read();
    }

これはファイル上のすべての私のコードです。入力したディレクトリを読み取り、テクスチャ ファイルを調べて、そこにある各 PNG ファイルに対して、前に指定したコードで JSON ファイルを作成します。コードを実行すると、このエラーが発生します。

    System.IO.IOException: 'プロセスはファイルにアクセスできません'C:\Users\https\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\resource_packs\Vanilla_Resource_Pack_1.17.10\textures\blocks\acacia_trapdoor .texture_set.json' 別のプロセスで使用されているためです。

私の問題に合った答えが見つかりません。助けていただければ幸いです。

これは Minecraft Bedrock Edition のリソース パックですが、役立つかどうかはわかりません。

4

1 に答える 1