如果我使用此代码
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”文件名就能正常读取文件,但我不能只使用它来写入文件。任何人都可以帮助我吗?
答案 0 :(得分:8)
您的工作目录是.exe所在的位置(除非您更改它)。所以你看,当你编译时,exe最终会在bin文件夹中,所以你的player.txt需要在那里,而不是你的源。
修改强>: 我打赌你要附加到player.txt那么你读它就知道它工作得很好,因为你在bin文件夹中创建了一个新的。否则,阅读将无法奏效。如果你进入你的bin文件夹并删除了player.txt,那么你的readfile就不行了。
答案 1 :(得分:3)
两种形式都完全有效。可能的情况是您的第二个版本只是写入不同位置的文件,因为未指定路径将默认为当前目录。
如果您不包含路径,则需要确保当前目录对于访问该文件有效。
答案 2 :(得分:2)
最有可能文件系统上有两个文件,一个在第一个示例中显式定义的目录中,另一个在第二个示例中运行可执行文件,因为在方法调用的参数中没有定义显式路径
来自MSDN:
给定字符串和文件路径,此方法将打开指定的文件, 将字符串附加到文件的末尾,然后关闭该文件。 即使这样,该方法也可以保证文件句柄被关闭 提出例外。
如果该文件不存在,则该方法会创建该文件,但不会创建该文件 新目录。因此,path参数的值必须 包含现有目录
答案 3 :(得分:0)
问题是AppendAllText是一个创建文件的方法,如果它还没有存在的话。因此,当您使用不完整的路径时,不确定是在基本目录中创建新文件还是添加到现有文件。如果由于某种原因无法使用完整路径,则可以使用以下内容获取当前工作目录:
File.AppendAllText(System.Environment.CurrentDirectory + "player.TXT", "what is good?");
只要当前目录正确无误,它的工作方式与您的第一个工作示例相同。