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 rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por dec
Pongamos por caso que grabas el archivo "C:\archivo.bmp" en el CD que se encuentra en la unidad "E". Para comprobar que el archivo se grabó correctamente una posible forma sería obtener el MD5 del archivo "C:\archivo.bmp" y compararlo con el del archivo "E:\archivo.bmp". Evidentemente este último ha de existir: de no ser así ya sabríamos que la grabación no terminó correctamente.

Pero tú para comprobar la existencia del archivo "E:\archivo.bmp" utilizarás la función "FileExists" (por simplificar el ejemplo) y le dirás al sistema operativo que te diga si el archivo "E:\archivo.bmp" existe o no existe: no si existe en la caché o no existe en la caché, sino si existe el archivo "E:\archivo.bmp". Así que no sé si me estoy perdiendo algo o qué...
Lo haga con md5sum, o con una función de comparación en memoria usando streams, lo haga de la forma en que lo haga, el problema no es ese. El problema está en la cache de lectura que Windows implementa en las unidades removibles, en este caso la grabadora de CD. Esta cache hace que al CD recien grabado no me lo lea fisicamente.

El problema es (voy a usar las letras de unidades de tu mensaje) es que cuando leo la unidad E: ,no me lee fisicamente el CD, sino que (al ser pocos datos los que grabo en el CD, 150 Mb como mucho) a los archivos los lee de la memoria (ya que Windows cachea las lecturas en las unidades removibles, y al ser un CD recién grabado, entonces su contenido está "cacheado"). Y al no leer fisicamente el CD, entonces NO puedo verificar si REALMENTE los datos se grabaron correctamente.

Gracias por la paciencia...

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

Pues muy bien puedes llevar razón. Aunque yo sigo sin entender cómo es posible que intente averiguar si existe el archivo "E:\archivo.bmp" y el sistema operativo me responda si existe o no "en la caché". No es eso lo que quiero saber: quiero saber si existe el archivo "E:\archivo.bmp".

Quiero decir que la caché estará estupenda para otros menesteres, pero, cuando uno no quiere saber si existe un archivo en la caché sino en una ruta en concreto, lo suyo (digo yo... vamos, que lo mismo estoy diciendo estupideces) es que se me respondiera si existe o no el archivo en la ruta que especifico.

De hecho si uno mira la ayuda sobre la función "FileExists", por ejemplo, en ningún lado se dice "Si el archivo está en una unidad removible es posible que esta función retorne "True" aunque el archivo no se encuentre en la ruta especificada...". Por ningún lado pone eso, así que ya me diréis qué pensáis sobre esto...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Me parece dec que no estas entendiendo a rretamar, el no quiere saber si el archivo existe. El quiere leer su contenido para poder compararlo con el archivo original.
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
Una pregunta ingenua: ¿que el caché no debería de ser lo suficientemente inteligente para determinar si debe comparar con la versión en memoria o la de disco? Es que yo, de verdad, no tengo idea de como funciona el caché.

// Saludos
Responder Con Cita
  #5  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por roman
Una pregunta ingenua: ¿que el caché no debería de ser lo suficientemente inteligente para determinar si debe comparar con la versión en memoria o la de disco? Es que yo, de verdad, no tengo idea de como funciona el caché.
Yo, si te digo la verdad, tampoco estoy seguro de que cache estamos hablando. Porque una cosa es copiar archivos desde el explorador de windows a un disquete y luego intentar leerlos de nuevo, por si nunca habéis probado, windows no lee los archivos del disquete sino que lo hace desde la cache. Pero en el caso de una grabadora de Cd es diferente, la información se graba en bruto en el grabadora desde el propio programa, así que cuando intentemos acceder a un archivo del cd no creo que este almacenado en ninguna cache. Son cosas completamente diferentes. O eso creo yo ...

Otra cosa seria si el programa utilizara la propia api de windows para copiar los archivos al cd, entonces puede que windows mantuviera una copia local de los mismos, pero esto ya son suposiciones ...

Lo dicho, yo no tengo muy claro de que cache estamos hablando ...
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: 23
rretamar Va camino a la famarretamar Va camino a la fama
Hagamos una simple prueba que refleja lo que estoy comentando:

1) Desde el explorador de Windows, vas a la unidad de CD, eliges una carpeta que contenga (por ejemplo) varios archivos que ocupan 30 Mb, y a través de copiar-pegar los copias a otra carpeta del disco rígido.

2) Durante la copia, la unidad de CD se enciende y los archivos se leen de allí.

3) Desde el explorador eliges la misma carpeta de la unidad de CD, y copias esos datos a una carpeta del disco rígido diferente a la de 1)

Sorpresa...la copia en este caso es mucho más rápida...y la unidad de CD ni se mueve. Es que Windows tiene en la cache de disco los datos de la unidad de CD, y los lee de allí.

Esa es la idea de la caché....acelerar el acceso manteniendo en memoria los últimos datos leídos, y -como la memoria es limitada- ir descartando de la caché los datos "menos solicitados". En situaciones normales esto es una bendición, ya que los accesos redundantes (como en este ejemplo) son mucho más veloces. Pero para realizar la verificación de los datos recientemente escritos en la unidad de CD por mi programa y al ser estos leídos de la cache, entonces no se realiza la lectura "física" y no puedo leer REALMENTE los datos del CD, que es lo que quiero.

Espero que no los canse con este "ladrillo".

Saludos desde ARgentina, 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.144
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
  #8  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.144
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Pero es que es lo mismo (en mi ignorancia). Si yo le digo a Windows lee este archivo... estoy diciéndole justamente eso: lee este archivo... no el que tengas en tu caché... lo de si existe el archivo es una forma de simplificar el razonamiento (si lo es) pero vendría a ser lo mismo en lo referente a leer el archivo: EL QUE YO DIGA, no el que Windows decida...

Ahora bien, no estoy quitando la razón al compañero... ya he dicho que bien puede ser que suceda tal como dice él...
__________________
David Esperalta
www.decsoftutils.com
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 13:22:00.


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