2

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 に再度保存することはできません。

私の質問を理解していただき、事前に回答してくださった皆様に感謝いたします。

4

3 に答える 3

1

SaveFileDialog.FileNameプロパティからファイルを取得し、クラス変数に保存する必要があります。

これにより、プログラムの実行中に永続化されます。

これをセッション間で保持するには、ユーザーのハード ドライブのどこかに保存する必要があります。これは、アプリケーション構成または設定ファイルを使用して行うことができます。

これに文字列プロパティを設定し、選択したファイル名をそれに保存します。

ロード時:

globalFileName = Properties.Settings.Default.FileName;

アプリケーションを閉じるとき:

Properties.Settings.Default.FileName = globalFileName;
Properties.Settings.Default.Save();
于 2013-02-10T15:14:41.603 に答える
0

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();

どこPromptForLocationで。場所の入力を求めるプロンプトが表示され、ユーザーはFileSaveDialog"

これにより、ユーザープロファイルディレクトリに保存される「ユーザーごと」の設定が提供されることに注意してください。別のユーザーがログオンすると、この設定の独自のコピーが取得されます。

于 2013-02-10T15:14:51.343 に答える
0

必要なのは設定ファイルで、XML ファイルにすることができます。プログラム専用の設定ファイル。常に同じ場所にあるため、プログラムはそれがどこにあるかを認識しています。また、ユーザー固有にすることもできます。

すべての会社のプロジェクトに含めるクラス ライブラリを作成します。これにはクラス ファイルと会社名があります。そのため、Program Files ディレクトリ内の会社の場所と、設定を保存する Common ディレクトリと、保存するユーザーのディレクトリについては明らかです。設定。

そのため、これら 3 つを示しますが、必要なものはユーザーの設定ディレクトリまたは 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 クラスを次に示します。

もう1つ、特定のプログラム用にこれらからサブディレクトリを作成する必要があります。異なるプログラムが同じ名前のファイルを持ち、like Settings.xml互いに競合しないようにするためです。

アプリケーション固有の場所に Company クラスを使用する ApplicationBase クラスがあります。例:

/// <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);
}

残りの 2 つ (ユーザーとプログラムのディレクトリ プロパティとファイル メソッド) の作成はあなたに任せます。

于 2013-02-10T19:02:38.410 に答える