Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Conflicto con archivos

Hola, estoy teniendo un problema a la hora de seleccionar un archivo en la aplicacion, me explico. Si pulso el boton "x" para abrir el explorador y seleccionar un archivo, lo selecciono y una vez tengo el nombre del archivo en un edit, vuelvo a repetir los mismos pasos pero con otro archivo y seguidamente vuelvo a seleccionar el archivo anterior (con lo que el edit vuelve a mostrar el archivo seleccionado la primera vez), la aplicacion me devuelve el mensaje "el archivo ya esta en uso por otra aplicacion".

En resumen..

1º pulso el boton abrir
2º selecciono un archivo "x"
3º en un edit aparece el nombre del archivo "x"
4º pulso el boton abrir
5º selecciono un archivo "y"
6º en el mismo edit aparece el nombre del archivo "y" borrando el nombre del anterior
7º vuelvo a pulsar el boton abrir
8º selecciono el mismo archivo "x"
9º la aplicacion muestra el mensaje "archivo en uso..." y no me deja seleccionarlo, cuando en realidad el ultimo archivo fue el "y"

¿Existe alguna forma o metodo de quitar de memoria un archivo previamente seleccionado al actual?

Esto digamos que se repite una y otra vez, por ejemplo si selecciono un nuevo archivo llamado "z", y luego quiero seleccionar el "x" o el "y", no me deja por que supuestamente ambos estan siendo usados.

Espero que alguien tenga alguna idea y pueda ayudarme. Gracias y un saludo.
Responder Con Cita
  #2  
Antiguo 23-09-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
puedes colocar el codigo?
lo abres para editarlo?, leerlo? grabarlo?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 23-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
El código sería este:

Código Delphi [-]
procedure TPrincipal.SpeedButton1Click(Sender: TObject);
var
  hdl: THandle;
  FileData: TWin32FindData;
  Size:int64;

begin
  if FileOpen.Execute then
  Size := 0;
  hdl := FindFirstFile(PChar(FileOpen.FileName), FileData);
  if (hdl <> INVALID_HANDLE_VALUE) then
  begin
    Int64Rec(Size).Lo := FileData.nFileSizeLow;
    Int64Rec(Size).Hi := FileData.nFileSizeHigh;
  end;

  ConvertFileSizes(Size);
  labEdit1.Text:= FileOpen.FileName;
//  label4.Caption:= extractFileName(fileOpen.FileName);
end;


El archivo se abre (desde otro proceso) para lectura. La verdad es que no consigo avanzar mas por culpa de esto y me tiene
Gracias y un saludo.
Responder Con Cita
  #4  
Antiguo 25-09-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Según el código que has puesto no parece haber error.
Salvo en la función ConvertFileSizes (que he tenido que desactivar).

¿Puedes ejecutar paso a paso y ver dónde se produce el error?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 25-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Para mi que estas abriendo el archivo...

1 - Prueba a seleccionar el archivo "X".
2 - Volver a seleccionar el archivo "X".

Si estoy en lo cierto el error se producirá...
Si es así deberías ver si no debes hacer un close al archivo antes de salir del procedimiento.


P/D: Probé tu código y a excepción de ConvertFileSizes(Size) que supongo es una función propia no genera ningún Error...


Saludos...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #6  
Antiguo 25-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola, si es cierto abro 2 veces el archivo "X" pero entre estas dos veces abro el archivo "Y", es decir, la secuencia seria esta: "x" --> "y" --> "x" con lo cual al abrir "y" no deberia darme error al intentar abrir "x" ¿no? con tanta x e y es un lio, espero estar explicandome bien.

saludos y gracias.
Responder Con Cita
  #7  
Antiguo 26-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por danielmj Ver Mensaje
Hola, si es cierto abro 2 veces el archivo "X" pero entre estas dos veces abro el archivo "Y", es decir, la secuencia seria esta: "x" --> "y" --> "x" con lo cual al abrir "y" no deberia darme error al intentar abrir "x" ¿no? con tanta x e y es un lio, espero estar explicandome bien.

saludos y gracias.
Hola danielmj.

Tál como te mencionó Neftalí el código que se visualiza no tendría que dar ese error.

Si limitas el código a:
Código Delphi [-]
...
var
  hdl: THandle;
  FileData: TWin32FindData;
  Size:int64;
begin
  with OpenDialog1 do
    if Execute then
    begin
      Size := 0;
      hdl  := FindFirstFile(PChar(FileName), FileData);
      if (hdl <> INVALID_HANDLE_VALUE) then
      begin
        Int64Rec(Size).Lo := FileData.nFileSizeLow;
        Int64Rec(Size).Hi := FileData.nFileSizeHigh;
      end;
      LabeledEdit1.Text := FileName;
    end;
end;
verás que te cansas de seleccionar alternadamente dos archivos sin que se produzca la situación que mencionas.

También coincido con Neeruu que pareciera que en otro punto del programa estas abriendo el archivo seleccionado sin cerrarlo. ¿ En la función ConvertFileSizes tal vez ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 26-09-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Eso es API de windows. Revisa:

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Estas obteniendo un handle y no lo estas liberando.
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 26-09-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Buenas a todos, ya lo he arreglado! me ha costao verlo macho!! mamcx con el handle cerrado seguí fallando, lo que pasaba es que en otro procedimiento hacía una llamada al mismo archivo, pero de otro modo, entonces claro por un lado estaba cerrado pero por otro seguí abierto y este estado ultimo es el que llevaba la voz cantante.

en ese otro procedimiento tenía estas lineas:

Código Delphi [-]
FileQ := TFileStream.Create( FileName, fmOpenRead);
label12.Caption:= IntToStr(FileQ.Size);

y por eso fallaba, tan solo tenía que poner "FileQ.Destroy" y ya va pegando tiros!!

Gracias a todos por vuestros aportes! ahora a ver que nueva pega sale.
Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conflicto de puertos con Indy davidrgh Internet 0 16-01-2012 14:06:47
Conflicto al Imprimir ¿? Alejandro73 Impresión 0 01-02-2008 20:01:28
Conflicto con SQL Dialect BDE rikr2rv Firebird e Interbase 2 28-08-2007 23:58:04
QuickReport: Conflicto de versiones Mauro.NET Impresión 2 08-09-2005 14:13:21
Conflicto con Session1. danytorres Varios 10 30-06-2005 23:33:56


La franja horaria es GMT +2. Ahora son las 22:54:20.


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
Copyright 1996-2007 Club Delphi