2010-11-01 71 views
10

yo uso el siguiente código para obtener directorios especialesconseguir mis documentos de ruta de la carpeta en Delphi

uses 
    ActiveX, ShlObj; 

{...} 

procedure TForm1.Button1Click(Sender: TObject); 
// Replace CSIDL_HISTORY with the constants below 
var 
    Allocator: IMalloc; 
    SpecialDir: PItemIdList; 
    FBuf: array[0..MAX_PATH] of Char; 
    PerDir: string; 
begin 
    if SHGetMalloc(Allocator) = NOERROR then 
    begin 
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir); 
    SHGetPathFromIDList(SpecialDir, @FBuf[0]); 
    Allocator.Free(SpecialDir); 
    ShowMessage(string(FBuf)); 
    end; 
end; 

Y ahora quiero obtener la ruta mis documentos así que uso mydocfolderpath: = cadena (FBuf) + ' \ Documents 'y creo que funciona bien pero mi duda es esta, la ruta de mydocuments en todas las PC con Windows (carpeta personal/documentos) puede el usuario cambiar esta estructura y hacer mi carpeta de documentos en cualquier otro lugar (por ejemplo: c: \ documents) if el usuario puede cambiar la ruta de acceso de una manera adecuada y me gusta saber cuál es el nombre de la carpeta mydocuments (Mis documentos o documentos)

+0

Tenga en cuenta que alguna versión de Windows utilizan localizada nombres de ruta. A menos que esté completamente seguro de qué versión e idioma está ejecutando, nunca agregue un nombre de carpeta "especial" como una constante de cadena en inglés o en cualquier idioma. Puede que no sea el nombre correcto en el sistema de destino. Siempre use uno de los CSIDL_ específicos o su equivalente más nuevo. –

Respuesta

15

CSIDL_PERSONAL es la carpeta Documentos Mi:

FOLDERID_Documents CSIDL_PERSONAL Versión 6.0. La carpeta virtual que representa el elemento de escritorio Mis documentos . Esto es equivalente a CSIDL_MYDOCUMENTS.

Anterior a la versión 6.0. El archivo del directorio del sistema utilizado físicamente para almacenar el repositorio común de un usuario de documentos . Una ruta de acceso típica es C: \ Documents and Settings \ username \ My Documentos. Esto debe ser distinguido de la carpeta virtual Mis documentos en el espacio de nombres. Para acceda a esa carpeta virtual, use SHGetFolderLocation, que devuelve ITEMIDLIST para la ubicación virtual, o consulte la técnica descrita en Administración del sistema de archivos. Gestión del sistema de archivos.

Ver: http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx para obtener una lista y descripción de todas las constantes CSIDL disponibles

15

Si está usando una versión reciente de Delphi (o mayor XE5), entonces usted puede utilizar las nuevas clases agnósticos de plataforma. Básicamente, incluya System.IOUtils en su uses y luego use TPath.GetDocumentsPath para obtener la carpeta de documentos.

Mira la Doc Wiki

Cuestiones relacionadas