即我有:
Environment.SpecialFolder.ApplicationData
Environment.SpecialFolder.CommonApplicationData
Environment.SpecialFolder.LocalApplicationData
我不清楚这些是在Windows XP和/或Windows Vista中指出的.
到目前为止,我发现ApplicationData指向XP中当前用户的ApplicationData文件夹和Vista中的漫游应用程序数据文件夹.
我还想知道是否有关于何时使用的一般指导原则.
以编程方式引用公用文件夹是否安全:
Directory = System.Environment.GetEnvironmentVariable("public")+"MyCompanyName" // etc.
Run Code Online (Sandbox Code Playgroud)
或者,还有更好的方法?
再次,如果有人为公共删除环境变量,并且这对于不同的语言操作系统使用是否安全呢?
我正在使用C#和.net 2.0
我将程序数据保存在以下文件中: C:\Program Data\MyProgramName\fileName.xml
安装并运行我的应用程序一次后我卸载它(在卸载期间我从"程序数据"中删除所有文件)然后重新安装应用程序,然后运行它.
奇怪的是,我的应用程序就像程序数据中存在的文件一样启动 - 意思是,即使数据文件被删除,我的应用程序中也有旧数据.
运行时:
File.Exists("C:\ Program Data\MyProgramName\fileName.xml")
即使我确定该文件不存在,我仍然"真实".
当我以管理员身份运行应用程序然后文件不存在时,事情就变得陌生了.
经过研究,我发现在运行我的应用程序时没有管理员权限而不是获取:
"C:\ Program Data\MyProgramName\fileName.xml"我得到"C:\ Users\userName\AppData\Local\VirtualStore\ProgramData\MyProgramName\fileName.xml"
确实有一个文件存在于以前的安装中(我显然没有删除,因为我不知道它存在).所以请指导我如何在没有管理员权限的情况下运行应用程序时停止此操作.我不想在VirtualStore文件夹中自动创建任何文件.请讨论阻止这种情况的所有可能方法.谢谢
我看到以下代码片段出现了奇怪的错误:
File.Copy(oldPath, targetPath,true);
File.SetAttributes(targetPath, FileAttributes.Normal);
Run Code Online (Sandbox Code Playgroud)
必须将文件移动到其他位置,因为我在源路径上没有写入权限,所以我复制文件并设置目标文件的访问权限.在我的系统(Windows 7 SP1)上,这很好用.
但是,据我所知(在我所知)任何Windows 10机器上,程序在File.SetAttributes上崩溃并显示消息
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not find file 'C:\ProgramData\...\BlankDb.sdf'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.SetAttributes(String path, FileAttributes fileAttributes)
Run Code Online (Sandbox Code Playgroud)
这告诉我即使代码已经通过File.Copy()行,该文件尚未成功复制.File.Copy()不再同步工作,或者在这方面有不同的操作系统上有任何其他改变吗?
坦率地说,我很难过.起初我想到了计时问题并尝试在新线程中包装Copy调用,直到我读取File.Copy()在成功复制或运行成错误之前不会返回.
在 Window 7、8 和 10 上,我希望我的应用程序将数据存储在共享位置,以便在 PC 上运行该应用程序的所有用户都可以访问相同的数据。数据是可读/可写的。我应该使用什么位置?
有人可以告诉我,为什么我的程序在使用VS Setup Projects安装后从两个文件夹写入/读取文件?在第一次启动时,当我启动程序并将程序中的某些内容保存到文件时,它会将其写入:
C:\ Users\UserName\AppData\Local\VirtualStore\Program Files(x86)\ Company Name\Program Name \"
设置"在系统启动后运行"后,我重新启动计算机并启动程序,但这次它从/写入此文件夹:
C:\ Users \用户名\ AppData \本地\ VirtualStore \的Windows\Syswow64资料
因此它在第二次启动时加载错误的值或什么都没有.看起来它取决于我如何启动程序,通过Desktop Symbol或Systemstart上的Autorun.
如何防止这种情况以及如何让程序始终从同一文件夹读/写?我更喜欢将文件保存在根文件夹中,其中exe是(C:\ Program Files(x86)\ CompanyName\ProgramName).
我认为问题出在VS Setup Projects中,或者是因为它是在64位系统上运行的32位应用程序.我已经在其他问题中寻找解决方案,但它没有帮助,相反它没有读任何东西.希望有人能帮助我,谢谢!
这就是我写文件的方式:File.WriteAllText(@"mailstate2", "true");
我没有给出路径...我只是希望它保存在根文件夹中...