5

如果我使用此代码

File.AppendAllText("C:/Users/Michael/Documents/Visual Studio 2010/Projects/PuzzleGame/PuzzleGame/PuzzleGameContent/player.TXT", "hi");

该文件将保存并在其末尾添加“hi”。但是,如果我这样做:

File.AppendAllText("player.TXT", "what is good?");

该文件不会有“什么是好的?” 最后。我可以只使用“player.TXT”文件名来读取文件,但我不能只使用它来写入文件。谁能帮我?

4

4 回答 4

8

您的工作目录位于 .exe 所在的任何位置(除非您更改它)。所以你看,当你编译时,exe 最终在 bin 文件夹中,所以你的 player.txt 需要在那里,而不是你的源代码。

编辑:我敢打赌你附加到 player.txt 然后你读了它,这就是它工作正常的原因,因为你在你的 bin 文件夹中创建了一个新的。否则,读取将不起作用。如果你进入你的 bin 文件夹并删除 player.txt,你的 readfile 不应该工作。

于 2013-10-23T20:56:17.087 回答
3

这两种形式都是完全有效的。可能的情况是您的第二个版本只是写入不同位置的文件,因为不指定路径将默认为当前目录。

如果不包含路径,则需要确保当前目录对访问文件有效。

于 2013-10-23T20:57:49.463 回答
2

文件系统上很可能有两个文件,一个在第一个示例中显式定义的目录中,另一个在第二个示例中运行可执行文件,因为在方法调用的参数中没有定义显式路径。

来自 MSDN:

给定一个字符串和一个文件路径,此方法打开指定文件,将字符串附加到文件末尾,然后关闭文件。即使引发异常,也保证通过此方法关闭文件句柄。

如果文件不存在,该方法会创建文件,但不会创建新目录。因此path参数的值必须包含已有的目录

.

于 2013-10-23T20:59:21.423 回答
0

问题是 AppendAllText 是一种在文件不存在时将创建文件的方法。因此,当您使用不完整的路径时,不确定是在基本目录中创建新文件还是添加到已经存在的文件中。如果您出于某种原因无法使用完整路径,则可以使用以下内容获取当前工作目录:

File.AppendAllText(System.Environment.CurrentDirectory + "player.TXT", "what is good?");

只要当前目录正确,它将与您的第一个工作示例相同。

于 2013-10-23T21:00:12.997 回答