Saltar al contenido

¿Cómo determino la ruta de la ‘Carpeta de descargas’ de Windows?

Verificamos de forma cada sección de nuestro espacio con el objetivo de enseñarte en todo momento la información más veraz y actual.

Solución:

Windows no define un CSIDL para la carpeta Descargas y no está disponible a través del Environment.SpecialFolder enumeración.

Sin embargo, la nueva API de Carpeta Conocida de Vista la define con el ID de FOLDERID_Downloads. Probablemente la forma más fácil de obtener el valor real es P/invocar SHGetKnownFolderPath.

public static class KnownFolder

    public static readonly Guid Downloads = new Guid("374DE290-123F-4565-9164-39C4925E467B");


[DllImport("shell32.dll", CharSet=CharSet.Unicode)]
static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out string pszPath);

static void Main(string[] args)

    string downloads;
    SHGetKnownFolderPath(KnownFolder.Downloads, 0, IntPtr.Zero, out downloads);
    Console.WriteLine(downloads);

Tenga en cuenta que el P/invoke proporcionado en pinvoke.net es incorrecto ya que no utiliza el juego de caracteres Unicode. También he aprovechado el hecho de que esta API devuelve la memoria asignada por el asignador COM. La ordenación predeterminada de P/invoke anterior es liberar la memoria devuelta con CoTaskMemFree que es perfecto para nuestras necesidades.

Tenga cuidado de que esta sea una API de Vista y superior y no intente llamarla en XP/2003 o anterior.

Puede usar el paquete de código API de Windows para Microsoft .NET Framework.

Referencia: Microsoft.WindowsAPCodePack.Shell.dll

Necesita el siguiente espacio de nombres:

using Microsoft.WindowsAPICodePack.Shell;

Uso sencillo:

string downloadsPath = KnownFolders.Downloads.Path;

Agradecemos que desees proteger nuestro estudio dejando un comentario y valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *