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: 22
rretamar Va camino a la famarretamar Va camino a la fama
Unhappy

Hola.
No tengo control si la lectura se realizará desde la caché de lectura del sistema operativo o del mismo CD. Me doy cuenta que se realiza desde la cache porque al leer los archivos del CD recién escrito la luz de la unidad ni se enciende, y la lectura es rapidísima. Eso lo controla el sistema operativo. He probado expulsar el CD y volverlo a insertar, pero Windows se da cuenta que es el mismo CD (por el número de serie) y la lectura la realiza desde la cache de lectura.

El componente que estoy usando (MagicBurner) solo controla la parte de grabación, pero no veo que tenga ninguna funcion para vaciar la cache de lectura de unidades removibles.

Poder se que se puede, sin ir más lejos Nero lo hace cuando activamos la opción de "verificar los datos escritos".


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.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver... no sabemos qué hace Nero, ¿verdad? Tú dices que no tienes control sobre si la lectura se realizará desde la caché del sistema operativo o desde el CD, pero, ¿esto cómo es posible?

Si eres tú quien implementa la comprobación de los archivos, eres tú el que tiene que codificar lo que sea menester para llevar a cabo la tarea. Ahora bien, tú grabaste los datos en el CD... y hasta aquí la participación de la caché del sistema operativo y del componente MagicBurner.

A partir de ahí (en mi ignorante opinión) eres tú quien debe implementar la comprobación de los archivos grabados. Y ya me dirás porqué no puedes hacerlo como quieras...

Es decir, si guardas antes de grabar las rutas de los archivos a grabar, por un lado, y luego compruebas que los archivos están donde deben estar en el CD... hágase esto como se tenga que hacer, repito que no sé dónde entra la caché del sistema operativo...

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é...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
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
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
  #4  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
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
  #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
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
  #6  
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
  #7  
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
  #8  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
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
  #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
¿No te servirá la función FlushFileBuffers?

// 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 09:38:08.


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