生成的 .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();
}
}
}
因此,我正在尝试生成一个包含 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();
}
}
}