2009-10-12 18 views
7

Estoy tratando de crear un archivo de texto en mi aplicación Windows Forms. Está funcionando bien, pero está creando el archivo de texto en la ubicación predeterminada de la aplicación (como en la carpeta bin). Pero quiero guardar ese archivo de texto creado en mi carpeta de archivos de usuario. ¿Cómo puedo hacerlo?Crear un archivo en la carpeta userfiles (C#, Windows Forms)

Este es mi código:

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

Respuesta

16

Puede utilizar Environment.GetFolderPath para obtener la ruta a la carpeta de datos de usuario:

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

Mira en la documentación de la Environment.SpecialFolder enumeración con el fin de encontrar la carpeta que mejor se adapte a sus necesidades.

+0

Lo tengo gracias Directory.GetCurrentDirectory() – Nagu

1

Simplemente añadir la ruta al nombre del archivo, como FileInfo fileusername = new FileInfo (@ "C: \ Users \ MyUser \ Documentos \ userinfo.txt");

+0

quiero crear solo en mi carpeta de aplicaciones (dynamicall) – Nagu

+1

Por favor, manténgase alejado de mi carpeta de documentos como una aplicación. "Mis documentos" se llama así porque * I * crea cosas ahí, no una aplicación aleatoria. Ya hay suficientes programas que ya se han equivocado. – Joey

1

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

O

String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
+0

Por favor, manténgase alejado de mi carpeta de documentos como una aplicación. "Mis documentos" se llama así porque * I * crea cosas ahí, no una aplicación aleatoria. Ya hay suficientes programas que ya se han equivocado. – Joey

+0

gracias por su rápida respuesta. Pero lamento no haber encuadrado mi pregunta correctamente ...Quiero crear un archivo en mi aplicación solamente (como c: \\ myapp \\ usercreatedfiles \) aquí quiero crear – Nagu

+0

@Nagu: no haga eso: esto requerirá que el usuario tenga permisos completos para la carpeta en el que está instalada la aplicación, que normalmente no es algo bueno. –

2

Puede utilizar Environment.SpecialFolder para crear una ruta de archivo que apunta a mis documentos:

string filePath = System.IO.Path.Combine(Environment.SpecialFolder.ApplicationData.ToString(), "userinfo.txt"); 
+0

He leído mal la pregunta y ya la solucioné – Christian

6

Puede utilizar la función Environment.GetFolderPath() junto con el Environment.SpecialFolder enumeración.

Uso:

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

para crear el nombre del archivo en los usuarios actuales My Documents carpeta.

1

Por lo que parece, simplemente desea crear su archivo de texto en un directorio personalizado. Mi consejo sería crear una constante para la ruta (tal vez guardarla en el archivo app.config).

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

utilizar una ruta relativa a su exe por lo que independientemente de donde se instala la aplicación de los ajustes siempre se guardan en "PathToExe/Configuración/UserInfo.txt".

allí tendría que hacer algo como:

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

Sin embargo, puede venir a través de unos problemas de permisos usando este enfoque, por lo general es una mejor idea para almacenar cosas como esta, ya sea en el registro o en el AppData directorio.

+0

oh gracias muchísima – Nagu

Cuestiones relacionadas