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.