c#写入没有完整路径的文件

时间:2013-10-23 20:53:51

标签: c#

如果我使用此代码

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 个答案:

答案 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?");

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