PDA

Ver la Versión Completa : Copiar un archivo a una tablet, conectada con USB


islu
23-10-2012, 19:34:50
Hola foro, lo primero es daros un fuerte saludo, hace años que no me conecto, os he ido leyendo, pero los proyectos me han mantenido fuera de Delphi unos años....; hay gente que continua de mis tiempos, otros no estan y como no mucha gente nueva.


Mi problema es el siguiente, resulta que tengo una aplicación en DELPHI 6, la cual ha de copiar un archivo a una tablet con Android; esto ha funcionado un par de años, pues con Android 2.2 ( creo recordar ) y WinXP, la unidad tablet cogía una letra.... por tanto no hay problema. Lo que ocurre ahora, es que hemos actualizado las tablets y los PCs, y ahora la tablet me aparece como "GT-N8000", me aparece una unidad llamada "Phone", si exploro veo las carpetas como si se tratase de una unidad más. Por tanto para copiar debo hacerlo en "Equipo\GT-N8000\Phone\music" o "Equipo\GT-N8000\Phone\DCIM"

Sabe alguien que puedo hacer?

Puedo llamar directamente al copiar archivos de windows ?

GRACIAS!!!!

Neftali [Germán.Estévez]
24-10-2012, 09:40:13
...me aparece una unidad llamada "Phone", si exploro veo las carpetas como si se tratase de una unidad más. Por tanto para copiar debo hacerlo en "Equipo\GT-N8000\Phone\music" o "Equipo\GT-N8000\Phone\DCIM"

Sabe alguien que puedo hacer?


¿Si lo haces así te funciona?
¿Es que no me queda claro si lo preguntas o lo has intentado?

¿Desde el explorador puede conectar una unidad de red? (para saberlo y aportar más datos)

islu
24-10-2012, 10:50:24
Hola, lo primero, por supuesto, es darte las gracias por interesarte.

Te comento, desde el explorador si puedo copiar archivos perfectamente, pero desde mi programa en DELPHI no puedo,he usado varias formas y nada.

Cuando navego por el dispositivo con el explorador, en la barra de direcciones me muestra "Equipo\GT-N8000\Phone\DCIM", si yo copio esa ruta en otro explorador, me lo abre sin problemas ( siempre que el dispositivo este conectado por USB, claro :o ).

No puedo mapear esa ruta como una unidad de red, en versiones anteriores en el dispositivo, me permitía conectarme como "almacenamiento masivo" y si que asignaba una unidad.

Cuando abro mi PC ( Equipo en W7 ), el terminal me aparece cómo "Dispositivos portatiles",con el nombre "GT-N8000", si le doy en propiedades, me muestra hasta el estado de la bateria.....

He probado funciones del ShellApi, esta por ejemplo :

function CopiaShell(Origen,Destino : String) : LongInt;
var
F : TShFileOpStruct;
sOrigen, sDestino : String;
begin
Result := 0;
sOrigen := Origen + #0;
sDestino := Destino + #0;

with F do
begin
Wnd := Application.Handle;
wFunc := FO_COPY;
pFrom := @sOrigen[1];
pTo := @sDestino[1];
fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION
end;
Result := ShFileOperation(F);
end;

Si ejecuto "CopiaShell('C:\islu.txt' ,'Equipo\GT-N8000\Phone\DCIM\islu.txt');" -> me dice "La carpeta c:\USER\admin\DESKTOP\EQUIPO\GT-N8000\Phone\DCIM\ no existe"

Si quito Equipo "CopiaShell('C:\islu.txt' ,GT-N8000\Phone\DCIM\islu.txt');" -> me dice "La carpeta c:\USER\admin\DESKTOP\\GT-N8000\Phone\DCIM\ no existe"

No se si me he explicado, MUCHAS GRACIAS por tú atención, espero que se te ocurra algo. GRACIAS!

Casimiro Notevi
24-10-2012, 10:54:16
Recuerda poner los tags al código fuente, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

islu
24-10-2012, 11:04:35
Recuerda poner los tags al código fuente, ejemplo:

Gracias :)

Disculpa... tienes razón. Gracias

Neftali [Germán.Estévez]
24-10-2012, 11:21:11
Me da la impresión de que lo que el explorador de Windows 7 te está mostrando en la barra de direcciones no debe ser la ruta real, como hace con otros directorios del sistema.
Lo que no acabo de tener claro es cómo podrías ver esa dirección correcta.

¿Has probado a acceder desde el símbolo de sistema, por ejemplo?

A ver cómo lo ves y si puedes acceder.

islu
24-10-2012, 11:40:02
Desde el símbolo de sistema no puedo. He buscado en panel de control, Dispositivos e impresoras, y alli me parece, pero no consigo ver ninguna opción que me permita encontrar otra manera de acceder a él.

He buscado también en el registro de windows, y nada..., si que encuentro refrencias a él, pero como un "device" por usb

GRACIAS POR EL INTERÉS

nlsgarcia
24-10-2012, 22:40:29
islu,

Revisa este link : http://delphi.cjcsoft.net/viewthread.php?tid=46036

En el aparecen los siguientes 5 métodos para copiar un archivo:

// Método-1:
Procedure FileCopy( Const sourcefilename, targetfilename: String );
Var
S, T: TFileStream;
Begin
S := TFileStream.Create( sourcefilename, fmOpenRead );
try
T := TFileStream.Create( targetfilename, fmOpenWrite or fmCreate );
try
T.CopyFrom(S, S.Size ) ;
finally
T.Free;
end;
finally
S.Free;
end;
End;


// Método-2:
procedure FileCopy(const FromFile, ToFile: string);
var
FromF, ToF: file;
NumRead, NumWritten: Word;
Buf: array[1..2048] of Char;
begin
AssignFile(FromF, FromFile);
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF, ToFile); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten < NumRead);
System.CloseFile(FromF);
System.CloseFile(ToF);
end;


// Método-3:
procedure CopyFile(FromFileName, ToFileName: string);
var
FromFile, ToFile: File;
begin
AssignFile(FromFile, FromFileName); { Assign FromFile to FromFileName }
AssignFile(ToFile, ToFileName); { Assign ToFile to ToFileName }
Reset(FromFile); { Open file for input }
try
Rewrite(ToFile); { Create file for output }
try

{ copy the file an if a negative value is returned raise an exception }
if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) raise Exception.Create('Error using LZCopy')
finally
CloseFile(ToFile); { Close ToFile }
end;
finally
CloseFile(FromFile); { Close FromFile }
end;
end;


// Método-4:
procedure CopyFile(FromFileName, ToFileName: string);
var
shellinfo: TSHFileOpStructA;
Files:String;
begin
Files:=FromFileName+#0+#0;
with shellinfo do
begin
Wnd:=Self.handle;
wFunc:=FO_COPY;
pFrom:=PChar(Files);
pTo:=PChar(ToFileName);
fFlags:=FOF_NOCONFIRMATION or FOF_SILENT;
end;
SHFileOperation(shellinfo);
end;


// Método-5:
copyfile(PChar(FromFileName),PChar(ToFileName),False);

Espero sea útil :)

Nelson.

islu
29-10-2012, 18:54:55
Muchas gracias Nelson, lamento decirte que no me han válido. En todos los casos el poblema es el destino. El problema parece ser que la dirección que me muestra Windows en la barra del explorador, "la traduce" o algo por el estilo.

MUCHAS GRACIAS, sigo buscando, a ver si a alguien se le ocurre algo... :confused:

nlsgarcia
30-10-2012, 07:55:02
islu,

Cuando navego por el dispositivo con el explorador, en la barra de direcciones me muestra "Equipo\GT-N8000\Phone\DCIM", si yo copio esa ruta en otro explorador, me lo abre sin problemas


El problema parece ser que la dirección que me muestra Windows en la barra del explorador, "la traduce" o algo por el estilo

Prueba la siguiente idea:

ShellExecute(0, nil, 'cmd.exe', '/C Subst i: "Equipo\GT-N8000\Phone\DCIM"', nil, SW_HIDE);

Subst es un comando de consola que permite asignar una letra de unidad a una ruta y hacerla disponible en el explorador de Windows, en el supuesto de que funcione puedes remover la unidad de la siguiente forma:

ShellExecute(0, nil, 'cmd.exe', '/C Subst i: /d', nil, SW_HIDE);

Otra opción es revisar en el Tablet si tiene alguna opción de configuración que afecte la forma como se mapea a Windows.

Espero sea útil :)

Nelson.