您需要的是一个设置文件,它可以是一个 XML 文件。程序专用的设置文件。它总是在同一个地方,所以你的程序知道它在哪里。它也可以是用户特定的。
我创建了一个类库来包含在我所有的公司项目中,它有一个类文件,公司名称,所以它显然是关于公司在 Program Files 目录中的位置,以及在 Common 目录中存储设置和 User 的目录来存储设置。
因此,我将展示这三个,但您想要的将是用户的设置目录或 Common。使用程序目录的问题在于它可能在C:\Program Files
其中,除非您的程序以管理员身份运行,否则操作系统不会让您在那里写入。
公共目录和文件:
public const string Company = "YourCompanyName";
/// <summary>
/// Common to all users Company data directory.
/// </summary>
public static DirectoryInfo CommonDataDirectory
{
get
{
string env = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(env, Company);
return new DirectoryInfo(path);
}
}
/// <summary>
/// Common to all users data file.
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static FileInfo CommonDataFile(params string[] path)
{
string fullName = Paths.Combine(CommonDataDirectory.FullName, path);
return new FileInfo(fullName);
}
用户的设置目录:
/// <summary>
/// User's common data directory
/// </summary>
/// <returns></returns>
public static DirectoryInfo UserDataDirectory
{
get
{
string env = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string path = Path.Combine(env, Company);
return new DirectoryInfo(path);
}
}
/// <summary>
/// File in user's common data directory
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static FileInfo UserDataFile(params string[] path)
{
return new FileInfo(Paths.Combine(UserDataDirectory.FullName, path));
}
程序目录:(程序/可执行文件的运行位置)
public static DirectoryInfo ProgramDirectory
{
get
{
string executablePath = System.Windows.Forms.Application.StartupPath;
return new DirectoryInfo(executablePath);
}
}
/// <summary>
/// Get's the file in the exectuable's directory, which would be
/// ProgramFiles/applicationName/filename
/// </summary>
public static FileInfo ProgramFile(params string[] path)
{
string file = Paths.Combine(ProgramDirectory.FullName, path);
return new FileInfo(file);
}
这是上面代码中引用的Paths 类。
另一件事是,您将希望从这些为您的特定程序创建一个子目录。这样您的不同程序可以具有相同名称的文件like Settings.xml
并且不会相互冲突。
我有一个 ApplicationBase 类,它将 Company 类用于特定于应用程序的位置。例子:
/// <summary>
/// The application's name
/// </summary>
public static string ApplicationName
{
get { return System.Windows.Forms.Application.ProductName; }
}
/// <summary>
/// Common to all users, application's data directory.
/// </summary>
public static DirectoryInfo CommonDataDirectory
{
get
{
string fullName = Path.Combine(Company.CommonDataDirectory.FullName, ApplicationName);
return new DirectoryInfo(fullName);
}
}
/// <summary>
/// Common to all users, file in application's data directory.
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static FileInfo CommonDataFile(params string[] name)
{
string fullName = Paths.Combine(CommonDataDirectory.FullName, name);
return new FileInfo(fullName);
}
我让你来创建另外两个,用户和程序的目录属性和文件方法。