我正在使用visual C#调试程序,在程序中我使用相对路径访问文件。
Stream s = File.Open("usr.dat", FileMode.OpenOrCreate);
目前正在(项目文件夹)/ bin / x86 / Debug文件夹(已编译的可执行文件所在的文件夹)中将其吐出。有没有办法改变相对路径的开放位置?
(我想要这样做的原因是因为我有多个项目但我想让所有人都可以访问文件usr.dat,所以如果你有另一个解决方案,我会很高兴的拿它)。
编辑:我发现我可以简单地更改属性中的项目工作目录。感谢您的投入,伙计们答案 0 :(得分:3)
是的,你不能这样离开。在启用了UAC或使用非管理员用户帐户运行的计算机上部署程序时,这将失败。您将没有对存储EXE的目录的写权限。
查看Environment.GetFolderPath()以查找您具有写入权限的appdata文件夹之一。
答案 1 :(得分:1)
不要使用“当前目录” - 这是一种1980年代的方法,它很容易被破坏(例如,如果你使用文件打开对话框,用户可以将当前目录保留在任何地方,用户可以在编辑时更改当前目录你的申请等。)。
因此,要找出从哪里开始,您可以使用Application.StartupPath。
在Vista / Win7中,您不能/不应该在Program Files中的任何地方写入 - 因此,如果是只读文件,则只使用相对于.exe的路径。在这种情况下,您可以将程序安装到“Program Files \ MyCompany \ ApplicationName”并将共享文件安装到“Program Files \ MyCompany \ Shared”中,并使用Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(Application.StartupPath)) )),“共享”)作为从中读取共享文件的文件夹。
如果您希望写入文件,则应使用用户的“我的文档”文件夹(对于用户可见的数据)或“应用程序数据”文件夹(对于您希望“隐藏”用户的内部数据)。使用Environment.GetFolderPath()来访问这些路径(例如Environment.SpecialFolder.ApplicationData等)
答案 2 :(得分:-1)
EXE的当前位置被用作您正在处理的文件的默认路径,因为您只指定了文件名。如果您在文件名之前使用文件路径(包含完整文件夹层次结构的字符串),它应该可以解决问题。
您可能希望将路径另存为单独的字符串变量,并将其与文件名连接。将路径分成变量也可以帮助您在文件功能中验证它,如 File.Exists(“path \ to \ your \ file \ file.ext”)