Este ejemplo tiene una función que abre un archivo de texto, lo lee y carga las líneas leídas en un Listbox, está hecho en C++, con VS 2005, para una PDA con Windows Mobile 2003 SE, pero funciona bien para una aplicación Windows de escritorio. La función es muy básica, simplemente abre el archivo usando _wfopen, lee los primeros nueve registros con fread y va cargando el Listbox, usando la función SendMessage. Falta hacer un par de cosas, como verificar errores y leer el archivo hasta su fin o retornar valores para saber el resultado, pero bueno el objetivo es mostrar como abrir y leer el archivo y además las conversión entre cadenas de ancho fijo y multibyte.
//****************************************************
//llamada a la función en el bucle de mensajes
case ID_MEN32782:
CargarLista(List1); //List1 es el handle del list box
break;
//****************************************************
//función
void CargarLista(HWND Lista){
FILE *stream;
wchar_t buff[20]={};
char buf[20]={};
HWND hWnd;
if( (stream = _wfopen( L"Storage Card\\Mis Doc\\arch.txt", L"r" )) == NULL )
MessageBox(hWnd, L"No se puede abrir el arvhivo", L"ERROR:", MB_ICONERROR | MB_OK);
for (int i=0;i<8;i++)
{
fread( buf, sizeof(char), 17, stream ); //fread devuelve el resultado char (multibyte)
mbstowcs( buff, buf, 16); //mbstowcs lo convierte a wchar_t (unicode), se desprecia el último byte porque es el salto de línea
SendMessage(Lista, LB_ADDSTRING, 0, (LPARAM)buff);
}
fclose(stream);
delete []buff;
delete []buf;
}
//****************************************************
//llamada a la función en el bucle de mensajes
case ID_MEN32782:
CargarLista(List1); //List1 es el handle del list box
break;
//****************************************************
//función
void CargarLista(HWND Lista){
FILE *stream;
wchar_t buff[20]={};
char buf[20]={};
HWND hWnd;
if( (stream = _wfopen( L"Storage Card\\Mis Doc\\arch.txt", L"r" )) == NULL )
MessageBox(hWnd, L"No se puede abrir el arvhivo", L"ERROR:", MB_ICONERROR | MB_OK);
for (int i=0;i<8;i++)
{
fread( buf, sizeof(char), 17, stream ); //fread devuelve el resultado char (multibyte)
mbstowcs( buff, buf, 16); //mbstowcs lo convierte a wchar_t (unicode), se desprecia el último byte porque es el salto de línea
SendMessage(Lista, LB_ADDSTRING, 0, (LPARAM)buff);
}
fclose(stream);
delete []buff;
delete []buf;
}
Comentarios