生成的 .txt 文件未显示

Generated .txt file doesn't show up

因此,我正在尝试生成一个包含 0 和 1 矩阵的 txt 文件,其中所有边框均为 0,并且矩阵主体随机填充这两个值。它应该是一个位图,其中 0 是障碍物,1 是寻路算法的可能节点。应多次调用该方法以生成用户想要的糊状图并保存在文件夹中。

我制作这个 class 来生成地图:

public static class GenerateText
{
    static string obstacle = "0";
    static string node = "1";

    

    public static void CreateMap(int x, int y, string name)
    {
        string path = "Assets/" + name + ".txt";
        if(!File.Exists(name + ".txt"))
        {
            FileStream fs = File.Create(path);
            StreamWriter writer = new StreamWriter(fs);

            string[,] map = new string[x, y];
            for (int i = 0; i < x; ++i)
            {
                for (int h = 0; h < y; ++h)
                {
                    int randomValue = RandomGenerator.GetRandom(0, 10);
                    if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
                    {
                        map[i, h] = obstacle;
                    }
                    else
                    {
                        map[i, h] = node;
                    }
                }
            }
            fs.Close();
            writer.WriteLine(map);
        }
       
    }
}

结果应该是这样的:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

调用的方法工作正常并到达终点,但是如果我检查解决方案,应该生成的文件丢失了。

我对这类事情很陌生,所以这可能是个愚蠢的问题,但是有人可以帮助我吗?

您将在写入 StreamWriter 之前关闭文件流!

fs.Close();
writer.WriteLine(map);

对于这种情况,最好使用 Using 语句,这样可以最大限度地减少此类问题。带或不带括号由您选择。

using (FileStream fs = File.Create(path))
using (StreamWriter writer = new StreamWriter(fs))

string[,] map = new string[x, y];
for (int i = 0; i < x; ++i)
{
    for (int h = 0; h < y; ++h)
    {
        int randomValue = RandomGenerator.GetRandom(0, 10);
        if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
        {
            map[i, h] = obstacle;
        }
        else
        {
            map[i, h] = node;
        }
    }
}
writer.WriteLine(map);

1- 你在写任何东西之前关闭文件流
2-您正在尝试编写一个数组。但是你只发送数组对象到你需要循环的文件

   public static class GenerateText
    {
        static string obstacle = "0";
        static string node = "1";



        public static void CreateMap(int x, int y, string name)
        {
            string path = Directory.GetCurrentDirectory() + "/" + name + ".txt";
            if (!File.Exists(name + ".txt"))//if there is a empty file with this name
            {                               //function doesnt work make sure you 
                                            //delete any empty file 
                FileStream fs = File.Create(path);
                StreamWriter writer = new StreamWriter(fs);

                string[,] map = new string[x, y];
                for (int i = 0; i < x; ++i)
                {
                    for (int h = 0; h < y; ++h)
                    {
                        int randomValue = RandomGenerator.GetRandom(0, 10);
                        if (randomValue > 6 || i == 0 || h == 0 || i == x || h == y)
                        {
                            map[i, h] = obstacle;
                        }
                        else
                        {
                            map[i, h] = node;
                        }
                    }
                }

                for (int a = 0; a < x; a++)
                {
                    for (int b = 0; b < y; b++)
                    {
                        writer.Write(map[a, b]);
                    }
                    writer.WriteLine();
                }
                writer.Close();
                fs.Close();
            }

        }
    }