Hola Jorge,<br><br>
<div class="gmail_quote">2010/5/6 Jorge Vega Sanchez <span dir="ltr"><<a href="mailto:memmaker650@gmail.com">memmaker650@gmail.com</a>></span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div style="WORD-WRAP: break-word">Bueno todo funciona bien como coentaba antes pero encuentro un error. Con getline lo hace todo correctamente y funciona perfectamente. 
<div>Pero si lo hago con read me imprime más caracteres que los que hay en el fichero que es lo que no entiendo. Porque se supone que cuando termina el fichero ya no debería imprimir más.</div>
<div>adjunto el fichero de lectura y el código anterior modificado para funcionar con read(char, length)</div>
<div><br></div>
<div>Mensaje obtenido:</div>
<div>
<div>La escritura se esta haciendo realmente bien.</div>
<div> A ver si va todo bien y puedo echar una partidilla al God of War.Hola</div>
<div>Hola</div>
<div>Hola</div>
<div>Hola</div>
<div>Hola minuto.</div>
<div>.</div>
<div><br></div>
<div><br></div>
<div>La ultima linea con el punto no debería salir. Esta otra versión me gustaría usarla para detectar unas cadenas de caracteres características en ficheros más largos.</div>
<div><br></div>
<div> </div></div></div></blockquote>
<div> </div>
<div>Sin ver el código fuente que has escrito, nos es difícil especificar el problema. De todos modos, creo saber cuál es el problema. Sólo porque el cursor llegue al final del fichero no implica que la función miembro 'eof()' lo detecte. Esta función meramente consulta el banderín interno del canal acerca del estado de tal "evento". Es decir, 'eof()' retorna el estado del fin de fichero, pero no consulta el cursor del fichero. Las funciones de lectura activan este banderín del fin de fichero.</div>

<div> </div>
<div>Esto implica que si haces una lectura completa, pero el cursor está justo al final del fichero, 'eof()' retornará 'false'. Al hacer una siguiente lectura, esta operación se encontrará con el cursor del fin de fichero y activará el banderín de este estado. Por supuesto, no se leerán caracteres y no se alterará el contenido de la cadena. Por lo tanto, la cadena contendrá los caracteres de la lectura anterior. Por esta razón, aparece una lectura repetida.</div>

<div> </div>
<div>Mi consejo es que leas primero y luego consultes si hemos llegado al final del fichero. Por ejemplo,</div>
<div> </div>
<div>do</div>
<div>{</div>
<div>  f.read( szCadena, 1024 );</div>
<div>  ...</div>
<div>} while( !f.eof() );</div>
<div> </div>
<div>o incluso,</div>
<div> </div>
<div>
<div>f.read( szCadena, 1024 );</div>
<div>...</div>while( !f.eof() )</div>
<div>
<div>{</div>
<div>  f.read( szCadena, 1024 );</div>
<div>  ...</div>
<div>}</div></div>
<div> </div>
<div> </div>
<div>Espero que esto te sirva.</div>
<div> </div>
<div>Steven</div>
<div> </div></div>