PDA

Ver la Versión Completa : Unidad de disco


walito
20-11-2006, 10:56:11
Buenas delphiseros!!

tengo un problema que no se por donde empezar, ya que no se mucho de ese tema.

Es posible hacer una unidad virtual en windows (F: por ejemplo) que al hacer click ahi yo muestre los archivos que yo necesite? por ejemplo me interesa hacer un cliente de ftp que lo tenga en una unidad de windows.

Que tengo que leer para aprender hacer dicha unidad?

gracias

walito
20-11-2006, 11:56:57
encontre este link http://www.clubdelphi.com/foros/showthread.php?t=35845 de alguien que preguntaba lo mismo, desde ya muchas gracias!

seoane
20-11-2006, 14:02:05
Vamos por partes, en el enlace que tu mencionas lo que piden es poder asociar un directorio a una letra de unidad, de tal forma que aparezca como un disco mas. Esto lo podemos hacer de la siguiente manera:

function AsociarLetra(Letra: Char; Ruta: String): Boolean;
var
Buffer: Array [0..MAX_PATH] of Char;
begin
if GetShortPathName(PChar(Ruta),@Buffer,Sizeof(Buffer)) > 0 then
Result:= DefineDosDevice(0,PChar(Letra + String(':')),@Buffer)
else
Result:= FALSE;
end;

function BorrarLetra(Letra: Char): Boolean;
begin
Result:= DefineDosDevice(DDD_REMOVE_DEFINITION,PChar(Letra + String(':')),nil);
end;

// Para hacer una asociacion
AsociarLetra('Z','C:\Archivos de programa');

// Para borrar la asociacion
BorrarLetra('Z');


En el ejemplo anterior asociamos la letra Z al directorio "c:\archivos de programa", ahora si vamos a "Mi PC" veremos que hay un disco nuevo (Z:\) que se corresponde con la carpeta. Esto es lo mismo que hace el comando Subst, ya un viejo conocido.

Ahora bien, leyendo tu primera pregunta, no creo que sea eso lo que quieres. Según entiendo yo, lo que tu quieres es que al abrir ese "disco vitual" tu puedas mostrar lo que a ti te de la gana. Eso ya lo veo mas difícil, para hacer eso necesitas crear un driver, y delphi no puede crear ese tipo de ejecutable.

walito
29-11-2006, 03:50:18
gracias seoane!!!

es verdad eso es lo que necesito , es conectarme a un ftp y el listado de archivos y directorios mostrarlo en una unidad en el explorador de archivos por ejemplo, eso me dices que es imposible??

gracias

seoane
29-11-2006, 21:54:14
:o Hay veces que hablo de más. Un poco mas arriba te dije que la única forma de hacer lo que tu querías era creando un driver, y eso es verdad si se quiere emular el comportamiento de un disco o un cdrom. Pero leyendo un poquito por ahí me he enterado de que existe una forma mas sencilla crear un directorio virtual, y es creando una "Shell Namespace Extensions", como hacen programas como GMail Drive. Estas creo que si se pueden crear desde delphi sin problemas, pero como ya dije esto es algo nuevo para mi así que sera mejor que leas la información tu mismo.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/namespaceextension/nse_works.asp

roman
29-11-2006, 22:15:21
Tal como menciono en el otro hilo, el explorador de Windows puede perfectamente visualizar un sitio ftp así que quizá no sea necesario gastarse mayormente.

También en el otro hilo di tres enlaces al msdn entre los que se cuentan el que escribe seoane arriba.

Por otra parte, pueden revisar el sitio de Mustankpeak (http://www.mustangpeak.net/) y buscar las componentes EasyNSE que sirven para implementar extensiones al shell, entre ellas, al espacio de nombres. Yo no las he revisadoa profundidad pero probé el ejemplo que trae en donde inserta el registro de windows en el explorador. Tiene algunos problemas pero esencialmente funciona bien.

// Saludos