[API WIN32] Problème d'écriture dans un fichier

elchevive Messages postés 3 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 6 janvier 2005 - 6 janv. 2005 à 19:44
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 6 janv. 2005 à 20:25
Salut à tous, j'ai un petit problème avec une fonction qui est censée
écrire dans un fichier le contenu de l'edit d'une fenêtre MDI.



Il créer le fichier, le texte se retrouve effectivement dans le buffer, mais au niveau du WriteFile, ça bloque....

Merci d'avance pour le coup de pouce



Voilà le code source :



void SauverFenetreFille(HWND hWndClient)

{

OPENFILENAME ofn;

char szNomFichier[TAILLENOMFICH];

DWORD dwBytesWritten;

HANDLE hFile;

int iLength;

PTSTR pstrBuffer;

WORD wByteOrderMark = 0xFEFF;

HWND hWndEdit, hWndChild;



*szNomFichier = '\0';

memset(&ofn,0,sizeof(ofn));

static TCHAR szFilter[] = TEXT("Text Files (*.TXT)\0*.txt\0") \


TEXT("ASCII Files (*.ASC)\0*.asc\0") \


TEXT("All Files (*.*)\0*.*\0\0");



ofn.lStructSize = sizeof(ofn);

ofn.hwndOwner = hWndClient;

ofn.lpstrFilter = szFilter;

ofn.nMaxFile = TAILLENOMFICH;

ofn.lpstrDefExt = TEXT("txt");

ofn.lpstrFile = szNomFichier;

ofn.Flags = OFN_OVERWRITEPROMPT;



BOOL truc;



if(GetSaveFileName(&ofn))

if(hFile = CreateFile(szNomFichier,


GENERIC_WRITE,


0, //FILE_SHARE_READ


0, //NULL


CREATE_NEW, //CREATE_ALWAYS //CREATE_NEW


FILE_ATTRIBUTE_NORMAL, //0


NULL) != INVALID_HANDLE_VALUE)

{



SetFilePointer(hFile,pstrBuffer,0,FILE_BEGIN);



// on donne le focus à la fenêtre fille

hWndChild = (HWND)LOWORD(SendMessage(hWndClient,WM_MDIGETACTIVE,0,0L));



// on récupère le handle de l'edit de la fenêtre fille

hWndEdit = (HWND)GetWindowLong(hWndChild,0);



iLength = GetWindowTextLength(hWndEdit);

pstrBuffer = (PTSTR)malloc((iLength + 1) * sizeof(TCHAR));



GetWindowText(hWndEdit,pstrBuffer,iLength + 1);



if(!WriteFile(hFile,

&pstrBuffer,

iLength * sizeof(TCHAR),

&dwBytesWritten,

NULL))

MessageBox(hWndClient,"NO WRITE DONE !!","DEBUG",MB_OK);



MessageBox(hWndClient,pstrBuffer,"DEBUG",MB_OK);



CloseHandle(hFile);

free(pstrBuffer);

}

}// fin function SauverFenetreFille

2 réponses

simtiers Messages postés 207 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 2 novembre 2006
6 janv. 2005 à 20:21
Il se peut que tu doives écrire

if(!WriteFile(hFile,

pstrBuffer,

iLength * sizeof(TCHAR),

&dwBytesWritten,

NULL))

Puisque pstrBuffer est un pointeur.

Sinon, je vois pas trop ce qui pourrait bloquer.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 janv. 2005 à 20:25
SetFilePointer(hFile,pstrBuffer,0,FILE_BEGIN); c'est quoi le but de cette ligne ???

Si tu veux ecraser le fichier a chaque fois, ouvre avec CREATE_ALWAYS, supprime la ligne du dessus et:
WriteFile(hFile, pstrBuffer, iLength * sizeof(TCHAR), &dwBytesWritten, 0);

En esperant que pstrBuffer est correctement alloue et rempli.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous