Создайте файл в папке пользовательских файлов (C #, Windows Forms) - PullRequest
9 голосов
/ 12 октября 2009

Я пытаюсь создать текстовый файл в моем приложении Windows Forms . Он работает нормально, но создает текстовый файл в расположении приложения по умолчанию (как в папке bin). Но я хочу сохранить этот созданный текстовый файл в моей папке пользовательских файлов. Как я могу это сделать?

Это мой код:

FileInfo fileusername = new FileInfo("userinfo.txt");
StreamWriter namewriter = fileusername.CreateText();
namewriter.Write(txtUsername.Text);
namewriter.Close();

Ответы [ 6 ]

18 голосов
/ 12 октября 2009

Вы можете использовать Environment.GetFolderPath, чтобы получить путь к папке с пользовательскими данными:

string fileName = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    "userinfo.txt");

Просмотрите документацию enum Environment.SpecialFolder , чтобы найти папку, которая наилучшим образом соответствует вашим потребностям.

7 голосов
/ 12 октября 2009

Вы можете использовать функцию Environment.GetFolderPath () вместе с перечислением Environment.SpecialFolder.

Использование:

String filePath = Path.Combine(
    Evironment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
    "userinfo.txt");

для создания имени файла в папке текущих пользователей My Documents.

2 голосов
/ 12 октября 2009

Вы можете использовать Environment.SpecialFolder для создания пути к файлу, который указывает на мои документы:

string filePath = System.IO.Path.Combine(Environment.SpecialFolder.ApplicationData.ToString(), "userinfo.txt");
1 голос
/ 12 октября 2009

Судя по всему, вы просто хотите создать свой текстовый файл в пользовательском каталоге. Мой совет - создать константу для пути (возможно, сохранив ее в файле app.config).

<appSettings>
    <add key="UserInfo" value="/Settings/UserInfo.txt" /> 
</appSettings>

Используйте относительный путь к вашему exe-файлу, поэтому независимо от того, где вы устанавливаете ваше приложение, настройки всегда будут сохраняться в "PathToExe / Settings / UserInfo.txt".

Тогда вы бы сделали что-то вроде:

string UserInfoPath = ConfigurationManager.AppSettings["UserInfo"];
if (String.IsNullOrEmpty(UserInfoPath))
{
    // perhaps use a default value or raise an exception
}

FileInfo fileusername = new FileInfo(Path.Combine(Application.StartUpPath, UserInfoPath));
StreamWriter namewriter = fileusername.CreateText();
namewriter.Write(txtUsername.Text);
namewriter.Close();

Однако при таком подходе вы можете столкнуться с проблемами с разрешениями. Обычно лучше хранить подобные вещи в реестре или в каталоге AppData.

1 голос
/ 12 октября 2009

String path = Environment.GetFolderPath (Environment.SpecialFolder.Personal);

OR

String path = Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments );
1 голос
/ 12 октября 2009

Просто добавьте путь к имени файла, как FileInfo fileusername = new FileInfo (@ "c: \ Users \ MyUser \ Documents \ userinfo.txt");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...