我之前遇到过一些问题导致我的程序在所有Windows操作系统中崩溃,因为我没有为我的文件创建新的文件/目录。然后我确信在初始化ect之前我已经创建了文件/文件夹。现在我的程序在Windows XP中运行,但它在Windows 7中不起作用。通过说它可行,我的意思是它创建了我的程序所需的文件/文件夹。不工作我的意思是文件/文件夹不是在Windows 7中创建的。
此代码可能是Windows 7下崩溃的原因吗?如果是这样,我该怎么办呢?
private static string dir = Environment.GetFolderPath
(Environment.SpecialFolder.ProgramFiles) + @"\folder\";
private static string file = dir + @"\Settings.txt";
private string text;
public void CheckFileStatus()
{
if (!Directory.Exists(dir))
{
DirectoryInfo directory = Directory.CreateDirectory(dir);
}
if (!File.Exists(file))
{
using (FileStream fileStream = File.Create(file))
{
}
}
}
答案 0 :(得分:6)
Windows 7中的程序文件目录只能使用提升的权限写入。您是否以管理员身份运行代码?写入程序文件文件夹也是不好的做法。您应该使用%appdata%文件夹。
查看here以查看各种特殊文件夹。您可能希望使用System.Environment.SpecialFolder.ApplicationData
或System.Environment.SpecialFolder.CommonApplicationData
。这将允许您在不需要提升权限的情况下编写数据。
答案 1 :(得分:3)
在Windows Vista和Windows 7上,如果没有提升权限(即充当管理员),则无法在Program Files中创建文件夹。通常有更好的位置放置任何用户都应该可写的设置文件。
Environment.SpecialFolder.ApplicationData
或Environment.SpecialFolder.LocalApplicationData
通常是用户特定应用数据的地方,这很可能是您想要的。
不同之处在于,在域中,ApplicationData
将放置在您的漫游配置文件中,并在域中的计算机之间共享,而LocalApplicationData
仅适用于该计算机。
对于家庭用户或者如果您不希望在计算机之间共享数据,可能LocalApplicationData
可能更好。这样你知道如果你最终在其中编写计算机特定数据,它不会在域上引起问题。
还有Environment.SpecialFolder.CommonApplicationData
允许在计算机上的所有用户之间共享相同的数据,但虽然这看起来很方便,但请考虑机器上的任何用户都可以更改稍后运行的程序的设置你可能会对安全产生影响。