[C con Clase] Extraño problemas con sprintf()

tttony jdeleca en yahoo.es
Mar Oct 20 21:00:41 CEST 2009


Hola, el programa compilar todo bien sin nigun error, el problema es el comportamiento del sprintf() en esta linea:

sprintf_s(pOutMessage, 100, _T("%u of %u"), TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart);

La variable pOutMessage = 65536 of 0

No deberia de darme cero en el segundo parametro ya que cuando lo depuro tiene un valor que no es cero, en este caso es el tamaño del archivo, mira este sreenshot:

aqui TotalFileSize.QuadPart no es cero:
http://www.subirimagenes.com/imagen-vc1-3404275.html


saludos


El pasado 2009-10-20 13:01:51, Silvio Stenta escribió:
 
SS> Ante todo soy nuevo en esto.
SS> No me da ningún error de compilación, pero de todos modos no hay error en 
SS> tiempo de ejecución porque el programa nunca entra a la parte del error que 
SS> vos decis.
SS> Hice paso a paso y nada.
SS> El codigo que tenes en esa pagina es :
SS> // vcMoveFileWithProgress.cpp: define el punto de entrada de la aplicación 
SS> de consola.
SS> //
SS> #include "stdafx.h"
SS> //#include <tchar.h>
SS> #include <windows.h>
SS> DWORD CALLBACK ProgressRoutine(
SS>     LARGE_INTEGER TotalFileSize,
SS>     LARGE_INTEGER TotalBytesTransferred,
SS>     LARGE_INTEGER StreamSize,
SS>     LARGE_INTEGER StreamBytesTransferred,
SS>     DWORD dwStreamNumber,
SS>     DWORD dwCallbackReason,
SS>     HANDLE hSourceFile,
SS>     HANDLE hDestinationFile,
SS>     LPVOID lpData
SS> )
SS> {
SS>     TCHAR* pOutMessage;
SS>     switch (dwCallbackReason)
SS>     {
SS>     case CALLBACK_CHUNK_FINISHED:
SS> 		{
SS>         pOutMessage = new TCHAR[100];
SS> 		//LONGLONG lltbtQuadpart = TotalBytesTransferred.QuadPart;
SS> 		//LONGLONG lltfsQuadpart = TotalFileSize.QuadPart;
SS> 		/** AQUI MAL HE PROBADO TOOOODO Y NADA **/
SS> 			sprintf_s(pOutMessage, 100, _T("%u of %u"), 
SS> TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart);
SS> 			/** pOutMessage = 65536 of 0 copied (No deberia de darme cero sino el 
SS> tamaño total del archivo)**/
SS> 		/** AQUI MAL FIN **/
SS> 		/** AQUI BIEN **/
SS> 			TCHAR* szTemp = new TCHAR[32];
SS> 			sprintf(szTemp, _T("%d"), TotalBytesTransferred.QuadPart);
SS> 			sprintf(pOutMessage, _T("%s of %d copied"), szTemp, 
SS> TotalFileSize.QuadPart);
SS> 			/** pOutMessage = 65536 of 15565272 copied (Aqui me da lo que quiero 
SS> peero)**/
SS> 		/** AQUI BIEN FIN **/
SS>         //MessageBox(NULL, pOutMessage, _T("Progress"), MB_OK);
SS>         delete[] pOutMessage;
SS> 		delete[] szTemp;
SS>         break;
SS> 		}
SS>     case CALLBACK_STREAM_SWITCH:
SS>         pOutMessage = new TCHAR[100];
SS> 		/** AQUI TAMBIEN ME PASA LO MISMO TENGO QUE COPIAR EL VALOR A UNA VARIABLE 
SS> **/
SS>         sprintf(pOutMessage, _T("%d of %d from stream %d has been copied."), 
SS> StreamBytesTransferred.QuadPart, StreamSize.QuadPart, dwStreamNumber);
SS>         //MessageBox(NULL, pOutMessage, _T("Progress"), MB_OK);
SS>         delete[] pOutMessage;
SS>         break;
SS>     }
SS>     return PROGRESS_CONTINUE;
SS> }
SS> int _tmain(int argc, _TCHAR* argv[])
SS> {
SS> 	TCHAR* szSourceFilePath = _T("G:\\Descargas\\AdbeRdr910_es_ES.exe");
SS> 	TCHAR* szDestFilePath = _T("C:\\TEMP.alf");
SS> 	BOOL rtn = CopyFileEx( szSourceFilePath, szDestFilePath, ProgressRoutine, 
SS> NULL, FALSE, NULL );
SS> 	DeleteFile( szDestFilePath );
SS> 	return 0;
SS> }
SS> --------------------------------------------------
SS> From: "tttony" <jdeleca en yahoo.es>
SS> Sent: Monday, October 19, 2009 9:12 PM
SS> To: <cconclase en listas.conclase.net>
SS> Subject: [C con Clase] Extraño problemas con sprintf()
SS> > Hola buenas noches, tenia tiempo que no entraba aqui, normalmente solo 
SS> > hago una cosulta cuando ya no le encuentro solucion a un problema y este 
SS> > es el caso, quiero crearme una aplicacion que me ayude a copiar archivos 
SS> > de un sitio a otro con algunas funciones extras, bien me he encontrado en 
SS> > internet este ejemplo:
SS> >
SS> > http://pastebin.com/m4f7e3ff0
SS> >
SS> > En el link explico el problema ya que es complicado de explicar, me han 
SS> > dicho que puede ser problemas con el 
SS> > buffer(http://msdn.microsoft.com/en-us/library/8dbf701c.aspx) pero yo uso 
SS> > VS2008 y lo tengo activado, tambien lo he probado con DEV-C++ y me da el 
SS> > mismo problema..
SS> >
SS> > saludos
SS> >
SS> >
SS> >
SS> >
SS> > ----
SS> >
SS> > en la programacion la teoria al final no es ni lo que era
SS> > _______________________________________________
SS> > Lista de correo Cconclase Cconclase en listas.conclase.net
SS> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
SS> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
SS> > 
SS> _______________________________________________
SS> Lista de correo Cconclase Cconclase en listas.conclase.net
SS> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
SS> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
----

en la programacion la teoria al final no es ni lo que era


Más información sobre la lista de distribución Cconclase