将xml文件保存在用户指定的路径上,然后再次从那里加载
本文关键字:然后 加载 从那里 路径 保存 文件 xml 存在 用户 | 更新日期: 2023-09-27 17:58:28
我正在学习如何在xml文件中保存日期,当我在代码中提供路径(例如C:''Users''Name''Documents)时,我已经可以做到了。但我希望用户在第一次打开程序时选择一次文件路径,然后永远使用这个文件路径。
到目前为止,我已经做到了:
string xmlFilePath = "C:''Users''Name''Documents''Visual Studio 2012''Projects''ToDoList''xmlList.xml";
XmlTextWriter xWriteList = new XmlTextWriter(xmlFilePath, Encoding.UTF8);
然后我有一大堆写命令,它们都很好用。只是为了澄清我的问题:当它在我的示例代码中显示"C:''Users等等"时,我想要用户选择一次的文件路径。我知道我可以让用户使用FileDialog选择一个文件路径,但我不知道如何保存这个路径。显然,我不能再次将其保存在xml中,因为用户必须再次选择该路径。
我希望你能理解我的问题,并感谢所有提前回答的人。
您需要从SaveFileDialog.FileName
属性中获取文件并将其保存在类变量中。
这将在程序运行时保持它。
要在会话之间保持此状态,您需要将其保存在用户硬盘上的某个位置。您可以使用应用程序配置或设置文件来执行此操作。
在this中设置一个字符串属性,然后将所选文件名保存到该文件名。
加载时:
globalFileName = Properties.Settings.Default.FileName;
关闭应用程序时:
Properties.Settings.Default.FileName = globalFileName;
Properties.Settings.Default.Save();
听起来您需要ApplicationSettingsBase
派生的设置。
//Application settings wrapper class
sealed class FormSettings : ApplicationSettingsBase
{
[UserScopedSettingAttribute()]
public string FilePath
{
get { return (string )(this["FilePath"]); }
set { this["FilePath"] = value; }
}
}
像这样使用:
<on form load handler>
frmSettings1 = new FormSettings();
if(frmSettings1.FilePath==null)
{
frmSettings1.FilePath = PromptForLocation();
}
<form exit handler>
frmSettings1.Save();
其中CCD_ 3阱。提示位置,使用类似"可以让用户使用FileSaveDialog
"选择文件路径
需要注意的是,这将提供一个"每个用户"设置,该设置存储在用户配置文件目录中。如果其他用户登录,他们将获得自己的此设置副本。
您需要的是一个设置文件,它可以是一个XML文件。程序的专用设置文件。它总是在同一个地方,所以你的程序知道它在哪里。它也可以是特定于用户的。
我创建了一个类库,包括在我的所有公司项目中,它有一个类文件,公司名称,所以它显然是关于公司在Program Files目录中的位置,在Common目录中存储设置,在User目录中存储设置。
因此,我将显示这三个,但您需要的是User’s settings目录或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);
}
我让您创建另外两个,用户和程序的目录属性和文件方法。