Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A mí personalmente no me cansa en absoluto, pero, es que lo que dices no responde a mi inquietud. Si Windows utiliza una caché para copiar archivos desde un CD al disco duro, es decir, si la primera copia la hace desde el CD y sucesivas copias las hace a partir de su caché... es problema de Windows, y yo estaré contento de que lo haga lo más rápido posible así que todos contentos.

Pero en este caso no se trata de Windows, se trata de mi programa. Y mi programa quiere saber si existe un archivo en la ruta "E:\archivo.bmp" y no le interesa para nada la caché y aquí Windows no tendría que contradecirme y decirme si existe el archivo o no existe el archivo en no sé qué caché: mi pregunta es simple, ¿existe el archivo "E:\archivo.bmp"? Y Windows tiene que limitarse a contestar a esa pregunta.

Tú no puedes controlar que Windows use no sé qué caché en sus tareas, pero, sí que puedes controlar que en tu programa se inquiera la existencia de un archivo en determinada ruta: no en ninguna caché ni en otro sitio distinto, exactamente en la ruta que le indicas. Y aquí vuelvo otra vez a la documentación de la función "FileExists", por ejemplo: en ningún lado se menciona que retornará "True" si el archivo solicitado existe en no sé qué caché. Es decir, esta función retornará "True" si el archivo "E:\archivo.bmp" existe y "False" en cualquier otro caso.

Ahora bien, ya me atrevo a preguntar... ¿tú lo has comprobado? Es decir, realmente la función "FileExists" te retorna "True" para un archivo "E:\archivo.bmp" que no existe en el cederrón, porque el mismo cederrón no se encuentre ya en el dispositivo sin ir más lejos? Porque yo me apuesto algo (je, je, je...) que si el cederrón no está en la unidad la función "FileExists" no puede retornar "True" en modo alguno si se le pasa como parámetro la ruta de un archivo que haya de estar en dicha unidad/cederrón.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo creo compartir la inquietud de dec. El sistema de caché debe funcionar de forma tal que no haya errores, de lo contrario sería altamente ineficaz, porque no sólo interviene aquí, sino en muchas operaciones de disco. Ahora, esto lo digo desde mi lógica, pero como ya mencioné, sé nada acerca del asunto.

Aún así, pregunto: ¿qué te hace (rretamar), asegurar que va a fallar por estar leyendo del caché? Sé que no tiene mucho sentido lo que pregunto. Pero ¿no se podría hacer una prueba haciendo fallar a propósito la copia en unos cuantos bytes por ahí? Si la verificación, tal como se hace ahora, sigue diciendo que todo está bien, pues habremos concluido que en efecto es culpa del caché.

// Saludos
Responder Con Cita
  #3  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo propongo una prueba muuuuuuuuuuuuuuy sencilla. Graba en un cederrón un par de archivos y a continuación (quitando el cederrón de la unidad) usa la función "FileExists" para tratar de averiguar si dichos archivos están el cederrón. Si la función te devuelve "True"... me la corto, como suele decirse.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo no me la corto pero sí que concuerdo en la simplicidad de la prueba.

// Saludos
Responder Con Cita
  #5  
Antiguo 16-01-2007
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 22
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por dec
Pero en este caso no se trata de Windows, se trata de mi programa. Y mi programa quiere saber si existe un archivo en la ruta "E:\archivo.bmp" y no le interesa para nada la caché y aquí Windows no tendría que contradecirme y decirme si existe el archivo o no existe el archivo en no sé qué caché: mi pregunta es simple, ¿existe el archivo "E:\archivo.bmp"? Y Windows tiene que limitarse a contestar a esa pregunta.
Windows te dice que el archivo existe, pero no lo lee de la unidad de CD, sino de la memoria. Es transparente para las aplicaciones, como bien lo muestra el ejemplo de copiar archivos que puse en el programa anterior.

Cita:
Empezado por dec
Tú no puedes controlar que Windows use no sé qué caché en sus tareas, pero, sí que puedes controlar que en tu programa se inquiera la existencia de un archivo en determinada ruta: no en ninguna caché ni en otro sitio distinto, exactamente en la ruta que le indicas. Y aquí vuelvo otra vez a la documentación de la función "FileExists", por ejemplo: en ningún lado se menciona que retornará "True" si el archivo solicitado existe en no sé qué caché. Es decir, esta función retornará "True" si el archivo "E:\archivo.bmp" existe y "False" en cualquier otro caso.

Ahora bien, ya me atrevo a preguntar... ¿tú lo has comprobado? Es decir, realmente la función "FileExists" te retorna "True" para un archivo "E:\archivo.bmp" que no existe en el cederrón, porque el mismo cederrón no se encuentre ya en el dispositivo sin ir más lejos? Porque yo me apuesto algo (je, je, je...) que si el cederrón no está en la unidad la función "FileExists" no puede retornar "True" en modo alguno si se le pasa como parámetro la ruta de un archivo que haya de estar en dicha unidad/cederrón.
El problema es que no solamente necesito que el archivo exista (fileexists), sino que quiero leer su contenido, para compararlo con el que está en el disco rígido y ver SI LA ESCRITURA EN EL CD SE REALIZO CORRECTAMENTE.

Los pasos que hace mi programa son:

1) Hay unos archivos en una carpeta del disco rígido.

2) A esos archivos los grabo en la unidad de CD, con el componente Magicburner.

En este momento, Windows guarda una copia de los datos escritos en la cache de disco, como hace con todas las unidades. Eso lo hace en forma transparente.

3) Al terminar la grabación, leo con mi programa la unidad de CD y comparo el contenido (archivo por archivo) con los que están en el disco rígido. De esa forma debería poder comprobar que se grabaron correctamente en el CD, o sea QUE SON LEGIBLES DESDE EL CD.

Es el paso 3 el que no está funcionando, por culpa de la cache que windows implementa en las unidades.

Y ahí es donde aparece el problema, porque al empezar a leerlos la unidad de CD ni se mueve, sin embargo los puedo leer, porque están cacheados en memoria. Y al no poderlos leer fisicamente desde el CD, entonces no puedo saber si la grabación se realizó correctamente.

Saludos , Tux
Responder Con Cita
  #6  
Antiguo 16-01-2007
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 22
rretamar Va camino a la famarretamar Va camino a la fama
Si saco el CD, Windows sabe que el medio no está presente y la funcion devuelve un error. Pero si lo vuelvo a insertar, Windows reconoce que es el mismo CD y como los datos aún están cacheados, me vuelve a leer la cache y no la unidad fisica.

Saludos, Tux
Responder Con Cita
  #7  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Tienes razón... la prueba de simple es un poco absurda, porque, ¿cómo podrías comprobar si existen los archivos en un cederrón si no está el cederrón en la unidad? Pero, es que en mi opinión para las funciones de lectura debería ser lo mismo: olvidemos "FileExists" (que yo mismo introduje en este Hilo), pero, ¿es que si utilizo una función "GetFileMd5('E:\archivo.bmp')" Windows va a poner en medio una caché?

En el caso de que la pusiera... Windows debiera comprobar que primero existe el archivo en el cederrón, por no ir más lejos, porque bien podría poner la caché por medio para acelerar determinadas tareas como copiar archivos, por ejemplo, pero, si le pregunto específicamente por el MD5 de un archivo... de una ruta en concreto... no estaría nada bien que se me respondiera con el archivo de una caché... porque eso no es lo que yo quiero saber.

No sé si alguien mencionó (creo que fue Román) que está bien que Windows use una caché cuando le sea menester para lo que le sea menester, pero, esta caché se tornaría ineficaz si se mete donde no la llaman, y yo creo que en el caso que nos ocupa nadie la llama... yo no quiero copiar archivos, por ejemplo, y la caché debería utilizarla Windows para este tipo de menesteres, pero no para cualquier cosa.

No sé. Me da qué sé yo insistir más, porque, supongo que habrás hecho tus pruebas, pero, chico, es que no lo entiendo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 16-01-2007
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 22
rretamar Va camino a la famarretamar Va camino a la fama
Unhappy

Cita:
Empezado por dec
Pero, es que en mi opinión para las funciones de lectura debería ser lo mismo: olvidemos "FileExists" (que yo mismo introduje en este Hilo), pero, ¿es que si utilizo una función "GetFileMd5('E:\archivo.bmp')" Windows va a poner en medio una caché?
Exactamente. Pone la caché en el medio y en forma "transparente".

Cita:
Empezado por dec
En el caso de que la pusiera... Windows debiera comprobar que primero existe el archivo en el cederrón
Como el CD se terminó de grabar hace diez segundos y no se expulsó de la unidad, Windows supone que los datos que tiene en memoria y que recogió durante la escritura son los mismos que están fisicamente grabados en el CD....es que justamente lo que yo quiero comprobar manualmente con mi programa.

Cita:
Empezado por dec
, por no ir más lejos, porque bien podría poner la caché por medio para acelerar determinadas tareas como copiar archivos, por ejemplo, pero, si le pregunto específicamente por el MD5 de un archivo... de una ruta en concreto... no estaría nada bien que se me respondiera con el archivo de una caché... porque eso no es lo que yo quiero saber.
Lo hace. Incluso al expulsar el CD y volverlo a insertar lo vuelve a hacer, porque Windows se da cuenta que es el mismo CD e insiste en devolver datos de la cache de lectura.

Si reinicio la PC, obviamente la cache se borra y entonces sí mi programa realiza una lectura "real" del CD. Tambén ocurre si hago otras lecturas de otros CDs, lo que hace que el contenido del cache sea
reemplazado por otro y al volver a insertar el CD recién grabado, ahí sí lo lee físicamente.


Saludos, Tux
Responder Con Cita
  #9  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y ya consideratse lo que te dije?

Haz una prueba alterando un poco los datos de un sólo archivo antes de grabarlo. ¿Qué pasa al hacer la comprobación?

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como pasar datos de una hoja de Excel a Bases de Datos de Paradox Goyo OOP 1 06-02-2007 01:57:20
Añadir datos desde una base de datos a un TListBox proyecto Conexión con bases de datos 1 21-11-2006 07:01:19
Guardar en 1 base de datos SQL, datos procedentes de 2 tablas distintas adaypr C++ Builder 1 05-09-2006 11:56:33
Verificación de dni luna Varios 4 29-05-2004 21:33:46
Reto Para Expertos En Base De Datos Y Tipos De Datos.... (blob) frankmch Conexión con bases de datos 2 08-09-2003 19:44:52


La franja horaria es GMT +2. Ahora son las 04:03:20.


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