Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Copiar un archivo a una tablet, conectada con USB (https://www.clubdelphi.com/foros/showthread.php?t=81223)

islu 23-10-2012 20:34:50

Copiar un archivo a una tablet, conectada con USB
 
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 10:40:13

Cita:

Empezado por islu (Mensaje 447768)
...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 11: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 :

Código Delphi [-]
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 11:54:16

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

islu 24-10-2012 12:04:35

Cita:

Empezado por Casimiro Notevi (Mensaje 447825)
Recuerda poner los tags al código fuente, ejemplo:

Gracias :)

Disculpa... tienes razón. Gracias

Neftali [Germán.Estévez] 24-10-2012 12: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 12: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 23: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:
Código Delphi [-]
// 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;
Código Delphi [-]
// 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;
Código Delphi [-]
// 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;
Código Delphi [-]
// 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;
Código Delphi [-]
// Método-5:
copyfile(PChar(FromFileName),PChar(ToFileName),False);
Espero sea útil :)

Nelson.

islu 29-10-2012 19: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 08:55:02

islu,
Cita:

Empezado por islu (Mensaje 448256)
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

Cita:

Empezado por islu (Mensaje 448256)
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:
Código Delphi [-]
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:
Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 19:53:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi