我在编写的工作中有一个C#后端应用程序。它将状态保存到txt文件,以便当它再次启动时,它将具有继续工作所需的详细信息。如果我在注册表中添加一个密钥以在用户登录时启动应用程序(HKCU),那么应用程序将启动,但无法读取它的状态txt文件。
我不知道这里发生了什么。 txt文件必须与应用程序位于同一文件夹中,我将其加载如下:
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
我实际上是使用以下方式阅读文件:
String[] lines = File.ReadAllLines(SaveFile);
这些都不是真的很复杂,但因为没有加载txt文件的内容,我假设1)File.Exists()
回来是假的,或者2)它回来是真的{{{ 1}}回来了。
如果我关闭程序并立即重新运行它,那么它就可以正常读取文件。在计算机启动时,如何让我的应用程序读取文件?
答案 0 :(得分:2)
实际上,如果当前目录与File.Exists
不同,则不检查并且不打开相同的文件(您将绝对路径传递到File.ReadAllLines
和相对路径Path.GetDirectoryName(Application.ExecutablePath)
) ,当你在启动时启动程序时就是这种情况(我想它应该是%WINDIR%\System32
,但我不确定 - 但是,它确实不是你的应用程序文件夹。)
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
String[] lines = File.ReadAllLines(SaveFile);
应该是
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
String[] lines = File.ReadAllLines(savepath);
首次失败,因为手动启动时以及Windows启动时工作目录会有所不同。
答案 1 :(得分:0)
尝试删除File.Exists()
检查(暂时)并查看是否会返回更详细的消息。它将有助于明确诊断失败的原因。文件有可能根本不存在 - 在这种情况下,您应该记录它正在寻找的完整路径,因为它可能不是您所期望的。如果以不同的身份启动进程,也可能存在权限问题。
答案 2 :(得分:0)
您应该确保在执行应用程序时它具有与系统执行时相同的权限,否则将无法访问该文件。
此外,您可能想要检查文件是否因某种原因而被锁定,并且可能会检查此主题:How to check for file lock?