C# - Obtener direcciones de carpetas.

Iniciado por NOIS, 13 Abril 2016, 15:02 PM

0 Miembros y 1 Visitante están viendo este tema.

NOIS

Hola,
Estoy haciendo un programa en el que necesito obtener la dirección de carpetas y archivos, como la dirección a la carpeta de un usuario.
El problema es que cuando estos archivos o carpetas tienen la letra 'ñ' en su nombre no recibe la dirección.

Código (csharp) [Seleccionar]

void CleanForAll(string AppData, string folder)
{
   foreach (string sid in keys)
   {
         string appDataPath = Registry.GetValue(UsersPath.Replace("<SID>", sid), AppData, null) as string;
         if (appDataPath != null) Clean(Path.Combine(appDataPath, folder));
   }
}


Ese es el código que uso para obtener las carpetas AppData de cada cuenta en el equipo, pero como digo, los nombres que contienen 'ñ' no los recoge.
¿Alguna idea?
Gracias.
NOIS dev7

dainodaibouken

Intenta esto, puedes reemplazar el character por su unicode.

void CleanForAll(string AppData, string folder)
{
    AppData = AppData.Replace("ñ","\u00f1");
    foreach (string sid in keys)
    {
          string appDataPath = Registry.GetValue(UsersPath.Replace("<SID>", sid), AppData, null) as string;
          if (appDataPath != null) Clean(Path.Combine(appDataPath, folder));
    }
}

NOIS

#2
Probé esa solución, pero no funcionó, por lo que hice otras pruebas y vi que el problema es que solo toma como válido el usuario desde el que se ejecuta el programa aunque 'keys' si registra todos los usuarios del sistema.

La aplicación la ejecuto siempre como administrador, por si alguien se pregunta eso.

¿Que otra forma podría utilizar para obtener la carpeta de todos los usuarios?
NOIS dev7

HCK.

En teoria la "ñ" no deberia de usarse en archivos y carpetas, por el problema que tienes tú, al ser un caracter "especialito".

Si el usuario contiene " ñ" y quieres obtener el usuario para despues obtener sus directorios/archivos de AppData, puedes jugar con Environment, por ejemplo:

Environment.SystemDirectory.Substring(0, 2) + @"\" + Environment.Username + @"\" + "Appdata;

Con SystemDirectory pasandole un Substring obtienes la letra de unidad donde se encuentra el sistema. Lo demas ya sale solo.

En el caso de que quieras otra carpeta de usuario, una vez en "Users" puedes obtener los usuarios que quieras con Directory.GetDirectories(), pasandolo con un foreach.

Una vez alli puedes jugar con la clase " Directory", para obtener las carpetas y archivos, y con un metodo que se llame asi mismo puedes sacar todos los archivos y subdirectorios del directorio AppData.

Ahora ando desde el movil y no me extiendo mas por eso, pero si llego a casa y no llegas a la conclusión te hecho una mano :).

Sorry por no poner etiquetas para el pequeño code, aun estoy trasteando con Tapatalk.

Saludos.

Enviado desde mi C6603 mediante Tapatalk