2010-09-29 4 views
0

Actuellement, j'utilise GetFileSizeEx pour suivre la taille d'un fichier journal avant de lui écrire. Nous avons un espace limité et quoi que ce soit si nous essayons de créer un fichier de plus de 100 mégaoctets, nous arrêtons la journalisation des données. Le problème est que pour une raison quelconque, GetFileSizeEx corrompra le handle de fichier que j'utilise.GetFileSizeEx corrompt le handle de fichier

if(hFileHandle != INVALID_HANDLE_VALUE && hFileHandle != NULL) 
{ 
asDbgMsg = asDbgMsg + asDelimeter; 
dwBytesToWrite =asDbgMsg.Length(); 
pWrtBuffer = asDbgMsg.c_str(); 
// Get the file size we are about to write to. 
PLARGE_INTEGER lpFileSize; 
GetFileSizeEx(hFileHandle, lpFileSize); 

// Don't write out the file if it is more than 100 mb! 
if(lpFileSize->QuadPart < 104857600) 
{ 
    WriteFile(hFileHandle, pWrtBuffer, dwBytesToWrite, &dwBytesWritten, NULL); 
} 
} 

hFileHandle passera d'une valeur normale (00000EB8) à ???? dans le débogueur de Rad studio.

Maintenant, j'ai résolu ce problème en utilisant la fonction GetFileSize à la place:

if(hFileHandle != INVALID_HANDLE_VALUE && hFileHandle != NULL) 
{ 
asDbgMsg = asDbgMsg + asDelimeter; 
dwBytesToWrite =asDbgMsg.Length(); 
pWrtBuffer = asDbgMsg.c_str(); 
// Get the file size we are about to write too. 
DWORD test; 
GetFileSize(hFileHandle, &test); 
// Don't write out the file if it is more than 100 mb! 
if(test < 104857600) 
{ 
    WriteFile(hFileHandle, pWrtBuffer, dwBytesToWrite, &dwBytesWritten, NULL); 
} 
} 

Cependant, je préfère ne pas utiliser la fonction non étendue. J'ai supprimé le fichier pour m'assurer qu'aucun autre processus ne le verrouille, mais il a toujours un problème lors de la création du fichier. Je dois noter que cette erreur ne se produit pas sous le constructeur 6, seulement Rad Studio 2010.

Merci pour l'aide.

Répondre

2

Essayez d'utiliser LARGE_INTEGER au lieu de PLARGE_INTEGER. Normalement, PLARGE_INTEGER est un pointeur, pas une valeur.

+0

Merci apparemment builder 6 était "utile" et considéré comme une valeur normale. – Alikar

Questions connexes