Compartir a través de


Clase CStdioFile

Representa un archivo de secuencia en tiempo de ejecución de C tal como lo abre la función en tiempo de ejecución fopen.

Sintaxis

class CStdioFile : public CFile

Miembros

Constructores públicos

Nombre Descripción
CStdioFile::CStdioFile Construye un objeto CStdioFile a partir de una ruta de acceso o un identificador de archivo.

Métodos públicos

Nombre Descripción
CStdioFile::Open Con sobrecarga. Open está diseñado para su uso con el constructor CStdioFile predeterminado (invalida CFile::Open).
CStdioFile::ReadString Lee una sola línea de texto.
CStdioFile::Seek Coloca el puntero de archivo actual.
CStdioFile::WriteString Escribe una sola línea de texto.

Miembros de datos públicos

Nombre Descripción
CStdioFile::m_pStream Contiene un puntero a un archivo abierto.

Comentarios

Los archivos de secuencia se almacenan en búfer y se pueden abrir en modo de texto (el predeterminado) o en modo binario.

El modo de texto proporciona un procesamiento especial para los pares de avance de retorno de carro. Al escribir un carácter de avance de línea (nueva línea) (0x0A) en un objeto CStdioFile en modo de texto, el par de bytes (0x0D, 0x0A) se envía al archivo. Cuando se lee, el par de bytes (0x0D, 0x0A) se traduce a un solo byte de 0x0A.

Las CFile funciones Duplicate, LockRangey UnlockRange no se admiten para CStdioFile.

Si llama a estas funciones en CStdioFile, obtendrá un CNotSupportedException.

Para obtener más información sobre el uso de CStdioFile, vea los artículos Archivos en MFC y Control de archivos en la Referencia de la biblioteca en tiempo de ejecución.

Jerarquía de herencia

CObject

CFile

CStdioFile

Requisitos

Encabezadoafx.h:

CStdioFile::CStdioFile

Construye e inicializa un objeto CStdioFile.

CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM);

Parámetros

pOpenStream
Especifica el puntero de archivo devuelto por una llamada a la función fopenen tiempo de ejecución de C .

lpszFileName
Especifica una cadena que es la ruta de acceso al archivo deseado. La ruta de acceso puede ser relativa o absoluta.

nOpenFlags
Especifica las opciones para la creación de archivos, el uso compartido de archivos y los modos de acceso a archivos. Puede especificar varias opciones mediante el operador OR ( | ) bit a bit.

Se requiere una opción de modo de acceso a archivos; otros modos son opcionales. Consulte CFile::CFile para obtener una lista de opciones de modo y otras marcas. En MFC versión 3.0 y posteriores, se permiten marcas de recurso compartido.

pTM
Puntero al objeto CAtlTransactionManager.

Comentarios

El constructor predeterminado no adjunta un archivo al objeto CStdioFile. Al usar este constructor, debe usar el método CStdioFile::Open para abrir un archivo y adjuntarlo al CStdioFile objeto.

El constructor de un solo parámetro adjunta un flujo de archivo abierto al objeto CStdioFile. Los valores de puntero permitidos incluyen los punteros de archivo de entrada y salida predefinidos stdin, stdouto stderr.

El constructor de dos parámetros crea un CStdioFile objeto y abre el archivo correspondiente con la ruta de acceso especificada.

Si pasa NULL para o pOpenStreamlpszFileName, el constructor produce una CInvalidArgException*excepción.

Si el archivo no se puede abrir o crear, el constructor produce una CFileException*excepción.

Ejemplo

TCHAR* pFileName = _T("CStdio_File.dat");
CStdioFile f1;
if(!f1.Open(pFileName, CFile::modeCreate | CFile::modeWrite 
   | CFile::typeText)) 
{
   TRACE(_T("Unable to open file\n"));
}

CStdioFile f2(stdout);
try
{
   CStdioFile f3( pFileName,
      CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
catch(CFileException* pe)
{
   TRACE(_T("File could not be opened, cause = %d\n"),
      pe->m_cause);
   pe->Delete();
}

CStdioFile::m_pStream

El m_pStream miembro de datos es el puntero a un archivo abierto tal como lo devuelve la función fopenen tiempo de ejecución de C .

FILE* m_pStream;

Comentarios

Es NULL si el archivo nunca se ha abierto o se ha cerrado.

CStdioFile::Open

Con sobrecarga. Open está diseñado para su uso con el constructor CStdioFile predeterminado.

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM,
    CFileException* pError = NULL);

Parámetros

lpszFileName
Cadena que es la ruta de acceso al archivo deseado. La ruta de acceso puede ser relativa o absoluta.

nOpenFlags
Modo de uso compartido y acceso. Especifica la acción que se debe realizar al abrir el archivo. Puede combinar opciones mediante el operador OR bit a bit (|). Se requiere un permiso de acceso y una opción de recurso compartido. los modos modeCreate y modeNoInherit son opcionales.

pError
Puntero a un objeto de excepción de archivo existente que va a recibir el estado de una operación con error.

pTM
Un puntero a un objeto CAtlTransactionManager.

Valor devuelto

TRUE si es correcto; de lo contrario, FALSE.

Comentarios

CStdioFile::ReadString

Lee datos de texto en un búfer, hasta un límite de nMax-1 caracteres, del archivo asociado al CStdioFile objeto .

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parámetros

lpsz
Especifica un puntero a un búfer proporcionado por el usuario que recibirá una cadena de texto terminada en NULL.

nMax
Especifica el número máximo de caracteres que se van a escribir en el lpsz búfer, incluido el valor NULL de terminación.

rString
Referencia a un objeto CString que contendrá la cadena cuando se devuelva la función.

Valor devuelto

Puntero al búfer que contiene los datos de texto. NULL si se alcanzó el final del archivo sin leer ningún dato; o si se ha alcanzado un valor booleano, FALSE si se alcanzó el final del archivo sin leer ningún dato.

Comentarios

La lectura se detiene con el primer carácter de nueva línea. Si, en ese caso, se han leído menos de nMax-1 caracteres, se almacena un carácter de nueva línea en el búfer. Un carácter nulo ('\0') se anexa en cualquier caso.

CFile::Read también está disponible para la entrada en modo de texto, pero no termina en un par de avance de retorno de carro.

Nota:

La CString versión de esta función quita si '\n' está presente; la LPTSTR versión no.

Ejemplo

CStdioFile f(stdin);
TCHAR buf[100];

f.ReadString(buf, 99);

CStdioFile::Seek

Cambia la posición del puntero en un archivo abierto previamente.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parámetros

lOff
Número de bytes para mover el puntero de archivo.

nFrom
Modo de movimiento de puntero. Debe ser uno de los siguientes valores:

  • CFile::begin: mueva los bytes lOff del puntero de archivo hacia delante desde el principio del archivo.

  • CFile::current: mueva los bytes lOff del puntero de archivo desde la posición actual del archivo.

  • CFile::end: mueva los bytes lOff del puntero de archivo desde el final del archivo. Tenga en cuenta que lOff debe ser negativo para buscar en el archivo existente; los valores positivos buscarán más allá del final del archivo.

Valor devuelto

Si la posición solicitada es legal, Seek devuelve el nuevo desplazamiento de bytes desde el principio del archivo. De lo contrario, el valor devuelto no está definido y se produce un objeto CFileException.

Comentarios

La función Seek permite el acceso aleatorio al contenido de un archivo moviendo el puntero una cantidad especificada, absoluta o relativamente. En realidad, no se lee ningún dato durante la búsqueda. Si la posición solicitada es mayor que el tamaño del archivo, la longitud del archivo se extenderá a esa posición y no se producirá ninguna excepción.

Cuando se abre un archivo, el puntero de archivo se coloca en el desplazamiento 0, el principio del archivo.

Esta implementación de Seek se basa en la función fseekRun-Time Library (CRT). Hay varios límites en el uso de Seek en secuencias abiertas en modo de texto. Para más información, vea fseek, _fseeki64.

Ejemplo

En el ejemplo siguiente se muestra cómo usar Seek para mover el puntero 1000 bytes desde el principio del cfile archivo. Tenga en cuenta que Seek no lee los datos, por lo que posteriormente debe llamar CStdioFile::ReadString a para leer los datos.

CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
   CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);

CStdioFile::WriteString

Escribe datos de un búfer en el archivo asociado al objeto CStdioFile.

virtual void WriteString(LPCTSTR lpsz);

Parámetros

lpsz
Especifica un puntero a un búfer que contiene una cadena terminada en null.

Comentarios

El carácter nulo terminado ( \0) no se escribe en el archivo. Este método escribe caracteres de nueva línea en lpsz el archivo como un par de avance de línea de retorno de carro.

Si desea escribir datos que no terminan en null en un archivo, use CStdioFile::Write o CFile::Write.

Este método produce un CInvalidArgException* si especifica NULL para el lpsz parámetro.

Este método produce una CFileException* excepción en respuesta a errores del sistema de archivos.

Ejemplo

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

Consulte también

CFile (clase)
Gráfico de jerarquías
CFile (clase)
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException (clase)