Application.UserAppDataPath 属性    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取用户的应用程序数据的路径。
public:
 static property System::String ^ UserAppDataPath { System::String ^ get(); };public static string UserAppDataPath { get; }member this.UserAppDataPath : stringPublic Shared ReadOnly Property UserAppDataPath As String属性值
用户的应用程序数据的路径。
示例
下面的代码示例显示两个窗体,并在两个窗体关闭时退出应用程序。 当应用程序启动和退出时,会记住每个窗体的位置。 此示例演示如何使用 UserAppDataPath 属性来存储用户的应用程序数据。
类 MyApplicationContext 继承 ApplicationContext 自每个窗体并跟踪每个窗体关闭时间,并在两者均处于状态时退出当前线程。 该类存储用户每个窗体的位置。 表单位置数据存储在标题 Appdata.txt 为由其确定 UserAppDataPath的位置中创建的文件。 方法 Main 调用 Application.Run(context) 以在给定的情况下 ApplicationContext启动应用程序。
此代码是类概述中显示的 ApplicationContext 示例的摘录。 出于简洁起见,不显示某些代码。 请参阅 ApplicationContext 整个代码列表。
   MyApplicationContext()
   {
      _formCount = 0;
      
      // Handle the ApplicationExit event to know when the application is exiting.
      Application::ApplicationExit += gcnew EventHandler( this, &MyApplicationContext::OnApplicationExit );
      try
      {
         
         // Create a file that the application will store user specific data in.
         _userData = gcnew FileStream( String::Concat( Application::UserAppDataPath, "\\appdata.txt" ),FileMode::OpenOrCreate );
      }
      catch ( IOException^ e ) 
      {
         
         // Inform the user that an error occurred.
         MessageBox::Show( "An error occurred while attempting to show the application. The error is: {0}", dynamic_cast<String^>(e) );
         
         // Exit the current thread instead of showing the windows.
         ExitThread();
      }
      
      // Create both application forms and handle the Closed event
      // to know when both forms are closed.
      _form1 = gcnew AppForm1;
      _form1->Closed += gcnew EventHandler( this, &MyApplicationContext::OnFormClosed );
      _form1->Closing += gcnew CancelEventHandler( this, &MyApplicationContext::OnFormClosing );
      _formCount++;
      _form2 = gcnew AppForm2;
      _form2->Closed += gcnew EventHandler( this, &MyApplicationContext::OnFormClosed );
      _form2->Closing += gcnew CancelEventHandler( this, &MyApplicationContext::OnFormClosing );
      _formCount++;
      
      // Get the form positions based upon the user specific data.
      if ( ReadFormDataFromFile() )
      {
         
         // If the data was read from the file, set the form
         // positions manually.
         _form1->StartPosition = FormStartPosition::Manual;
         _form2->StartPosition = FormStartPosition::Manual;
         _form1->Bounds = _form1Position;
         _form2->Bounds = _form2Position;
      }
      
      // Show both forms.
      _form1->Show();
      _form2->Show();
   }
   void OnApplicationExit( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      
      // When the application is exiting, write the application data to the
      // user file and close it.
      WriteFormDataToFile();
      try
      {
         
         // Ignore any errors that might occur while closing the file handle.
         _userData->Close();
      }
      catch ( Exception^ ) 
      {
      }
   }
private:
private MyApplicationContext()
{
    _formCount = 0;
    // Handle the ApplicationExit event to know when the application is exiting.
    Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
    try
    {
        // Create a file that the application will store user specific data in.
        _userData = new FileStream(Application.UserAppDataPath + "\\appdata.txt", FileMode.OpenOrCreate);
    }
    catch (IOException e)
    {
        // Inform the user that an error occurred.
        MessageBox.Show("An error occurred while attempting to show the application." +
                        "The error is:" + e.ToString());
        // Exit the current thread instead of showing the windows.
        ExitThread();
    }
    // Create both application forms and handle the Closed event
    // to know when both forms are closed.
    _form1 = new AppForm1();
    _form1.Closed += new EventHandler(OnFormClosed);
    _form1.Closing += new CancelEventHandler(OnFormClosing);
    _formCount++;
    _form2 = new AppForm2();
    _form2.Closed += new EventHandler(OnFormClosed);
    _form2.Closing += new CancelEventHandler(OnFormClosing);
    _formCount++;
    // Get the form positions based upon the user specific data.
    if (ReadFormDataFromFile())
    {
        // If the data was read from the file, set the form
        // positions manually.
        _form1.StartPosition = FormStartPosition.Manual;
        _form2.StartPosition = FormStartPosition.Manual;
        _form1.Bounds = _form1Position;
        _form2.Bounds = _form2Position;
    }
    // Show both forms.
    _form1.Show();
    _form2.Show();
}
private void OnApplicationExit(object sender, EventArgs e)
{
    // When the application is exiting, write the application data to the
    // user file and close it.
    WriteFormDataToFile();
    try
    {
        // Ignore any errors that might occur while closing the file handle.
        _userData.Close();
    }
    catch { }
}
Public Sub New()
    MyBase.New()
    _formCount = 0
    ' Handle the ApplicationExit event to know when the application is exiting.
    AddHandler Application.ApplicationExit, AddressOf OnApplicationExit
    Try
        ' Create a file that the application will store user specific data in.
        _userData = New FileStream(Application.UserAppDataPath + "\appdata.txt", FileMode.OpenOrCreate)
    Catch e As IOException
        ' Inform the user that an error occurred.
        MessageBox.Show("An error occurred while attempting to show the application." +
                        "The error is:" + e.ToString())
        ' Exit the current thread instead of showing the windows.
        ExitThread()
    End Try
    ' Create both application forms and handle the Closed event
    ' to know when both forms are closed.
    _form1 = New AppForm1()
    AddHandler _form1.Closed, AddressOf OnFormClosed
    AddHandler _form1.Closing, AddressOf OnFormClosing
    _formCount = _formCount + 1
    _form2 = New AppForm2()
    AddHandler _form2.Closed, AddressOf OnFormClosed
    AddHandler _form2.Closing, AddressOf OnFormClosing
    _formCount = _formCount + 1
    ' Get the form positions based upon the user specific data.
    If (ReadFormDataFromFile()) Then
        ' If the data was read from the file, set the form
        ' positions manually.
        _form1.StartPosition = FormStartPosition.Manual
        _form2.StartPosition = FormStartPosition.Manual
        _form1.Bounds = _form1Position
        _form2.Bounds = _form2Position
    End If
    ' Show both forms.
    _form1.Show()
    _form2.Show()
End Sub
Private Sub OnApplicationExit(ByVal sender As Object, ByVal e As EventArgs)
    ' When the application is exiting, write the application data to the
    ' user file and close it.
    WriteFormDataToFile()
    Try
        ' Ignore any errors that might occur while closing the file handle.
        _userData.Close()
    Catch
    End Try
End Sub
注解
如果路径不存在,则会使用以下格式创建一个路径:
基本路径\CompanyName\ProductName\ProductVersion
此路径中存储的数据是为漫游启用的用户配置文件的一部分。 漫游用户在网络上的多台计算机上工作。 漫游用户的用户配置文件保留在网络上的服务器上,并在用户登录时加载到系统上。 要考虑漫游的用户配置文件,操作系统必须支持漫游配置文件,并且必须启用它。
典型的基路径是 C:\Documents 和 设置\username\Application Data。 但是,如果使用ClickOnce部署Windows 窗体应用程序,则此路径将有所不同。 ClickOnce创建与所有其他应用程序隔离的自己的应用程序数据目录。 有关详细信息,请参阅访问 ClickOnce 应用程序中的本地和远程数据。