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
, LockRange
y 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
CStdioFile
Requisitos
Encabezado: afx.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 fopen
en 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
, stdout
o 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 pOpenStream
lpszFileName
, 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 fopen
en 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 byteslOff
del puntero de archivo hacia delante desde el principio del archivo.CFile::current
: mueva los byteslOff
del puntero de archivo desde la posición actual del archivo.CFile::end
: mueva los byteslOff
del puntero de archivo desde el final del archivo. Tenga en cuenta quelOff
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 fseek
Run-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);
Vea también
CFile
(clase)
Gráfico de jerarquías
CFile
(clase)
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException
(clase)