begin process at 2012 05 29 21:58:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Problème sauvegarde de fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème sauvegarde de fichier

jeudi 26 février 2004 à 10:03:18 | Problème sauvegarde de fichier

sleeper41

Bonjour à tous!
Voila j'essaie de sauvegarder un fichier txt bloc note sans passer par fichier enregister sous ect ..., mais j'ai quelque soucies.
En fait tout à l'air de bien se dérouler quand je sauvegarde. Sous un nouveau nom de fichier il me créé bien mon fichier mais malheureusement il est vide. Idem pour fichier existant!
Cela ne viendrai t il pas de GetDlgItemText
J ai essayer aussi avec SetWindowText.
Quelqu'un peut t'il m'éclairer?
Voila le Code de la fonction SauverSous:

OPENFILENAME SauverFichierSous()
{
HANDLE Fichier;
HWND hNote = FindWindow("NotePad", 0);
HWND hEdit = GetDlgItem(hNote, 0x0000000F);
OPENFILENAME ofn;

char NomDuFichier[MAX_PATH] = "";

char NomFichier[MAX_PATH] = "";
SECURITY_ATTRIBUTES Secu;

Secu.nLength = sizeof(SECURITY_ATTRIBUTES);
Secu.lpSecurityDescriptor = NULL;
Secu.bInheritHandle = NULL;

ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hNote;
ofn.lpstrFilter = "Fichier Texte (*.txt)\0*.txt\0 Fichier C (*.c)\0*.c\0 Fichier C++ (*.cpp)\0*.cpp\0 Fichier Header (*.h)\0*.h\0 Tous les fichiers (*.*)\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NomFichier;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrFile = NomDuFichier;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;

if(GetSaveFileName(&ofn))
{
Fichier = CreateFile(NomFichier,GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&Secu, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
char TextBuffer[65000];

if(Fichier != INVALID_HANDLE_VALUE)
{
DWORD Read;
int TailleBuffer = SendDlgItemMessage(hEdit,0,WM_GETTEXTLENGTH ,0,0) + 1;
// SetWindowText(hEdit,TextBuffer);
GetDlgItemText(hEdit,0,TextBuffer,TailleBuffer);
WriteFile(Fichier,TextBuffer,TailleBuffer,&Read,NULL);
SetWindowText(hNote,"Document Sauvegardé");
}
CloseHandle(Fichier);
}
return ofn;
}

Merci d'avance ;)
jeudi 26 février 2004 à 10:23:11 | Re : Problème sauvegarde de fichier

BruNews

Administrateur CodeS-SourceS
SendDlgItemMessage !!! tu as regarde dans MSDN les params attendus ???
idem pour GetDlgItemText.

Remplace par SendMessage et GetWindowText.

ciao...
BruNews, Admin CS, MVP Visual C++
jeudi 26 février 2004 à 11:18:37 | Re : Problème sauvegarde de fichier

sleeper41

Ok je vais essayer comme ca.

Merci.
jeudi 26 février 2004 à 13:03:31 | Re : Problème sauvegarde de fichier

sleeper41

Encore désolé mais je ne vois vraiment po.
J'ai fait comme tu m'as (enfin je crois). J ai été voir sur msdn.
Il y a un exemple, je m'en suis inpiré mais ca marche pas!
Tu pourrais po me filer un ptit indice?
Voila le nouveau code: :(

OPENFILENAME SauverSousFichier()
{
HANDLE Fichier;
HWND hNote = FindWindow("NotePad", 0);
HWND hEdit = GetDlgItem(hNote, 0x0000000F);

OPENFILENAME ofn;

char NomDuFichier[MAX_PATH] = "";

char NomFichier[MAX_PATH] = "";
SECURITY_ATTRIBUTES Secu;

Secu.nLength = sizeof(SECURITY_ATTRIBUTES);
Secu.lpSecurityDescriptor = NULL;
Secu.bInheritHandle = NULL;

ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hNote;
ofn.lpstrFilter = "Fichier Texte (*.txt)\0*.txt\0\ Fichier C (*.c)\0*.c\0\ Fichier C++ (*.cpp)\0*.cpp\0\ Fichier Header (*.h)\0*.h\0\ Tous les fichiers (*.*)\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NomFichier;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrFile = NomDuFichier;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;

if(GetSaveFileName(&ofn)){
Fichier = CreateFile(NomFichier,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,&Secu, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

PSTR TextBuffer;
if(Fichier != INVALID_HANDLE_VALUE){ DWORD Read;
int TailleBuffer = GetWindowTextLength(hEdit);
TextBuffer = (PSTR) VirtualAlloc((LPVOID) NULL,
(DWORD) (TailleBuffer + 1), MEM_COMMIT,
PAGE_READWRITE);
GetWindowText(hEdit, TextBuffer, TailleBuffer + 1);

WriteFile(Fichier,TextBuffer,TailleBuffer,&Read,NULL);
SetWindowText(hNote,"Document Sauvegardé");
}
CloseHandle(Fichier);

VirtualFree(TextBuffer, 0, MEM_RELEASE);
}
return ofn;
}

merci!
jeudi 26 février 2004 à 13:15:09 | Re : Problème sauvegarde de fichier

BruNews

Administrateur CodeS-SourceS
SECURITY_ATTRIBUTES ne me semble pas utile ici, passe 0 a CreateFile.
Separe un peu tout cela, trop brouillon. Mets une func qui recup le nom de fichier choisi a part.

Ensuite tu mets un MessageBox(par exemple) a chaque etape pour verif reussite, recup texte, alloc memoire, etc...

Une piste, VirtualAlloc me semble avoir un prob sur 3 eme param.

ciao...
BruNews, Admin CS, MVP Visual C++
jeudi 26 février 2004 à 14:06:00 | Re : Problème sauvegarde de fichier

sleeper41

Me revoila! :(
ca marche toujours po.
Donc j ai bien fait les tests nomfichier et nomdufichier
je récupère bien les bonne valeur (nomfichier et emplacementfichier)
Ensuite j'ai viré SECU et remplacer par 0.
Pour ce ki est du 3eme param de virtualalloc, je vois po tres bien ce ke tu veux dire?
Tu aurais pas une idée sur le pb ?
Pareil si je veux afficher la taille (Int
TailleBuffer) je peux pas avec un MessageBox?
Désolé si cela te semble bete comme question mais je débute dans la prog api .

OPENFILENAME SauverSousFichier(bool &sauve)
{
HANDLE Fichier;
HWND hNote = FindWindow("NotePad", 0);
HWND hEdit = GetDlgItem(hNote, 0x0000000F);

PSTR TextBuffer;
OPENFILENAME ofn;

char NomDuFichier[MAX_PATH] = "";
char NomFichier[MAX_PATH] = "";

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hNote;
ofn.lpstrFilter = "Fichier Texte (*.txt)\0*.txt\0 Tous les fichiers (*.*)\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NomFichier;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrFile = NomDuFichier;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;

if(GetSaveFileName(&ofn))
{
Fichier = CreateFile(NomFichier,GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,0,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

if(Fichier != INVALID_HANDLE_VALUE)
{
DWORD Read;

int TailleBuffer = GetWindowTextLength(hEdit);

TextBuffer =
(PSTR)VirtualAlloc(NULL,TailleBuffer+1,MEM_COMMIT,PAGE_READWRITE);

MessageBox(hEdit,NomFichier,"NomFichier",0); // Test nom fichier
MessageBox(hEdit,NomDuFichier,"NomduFichier",0); // Test emplacement fichier

GetWindowText(hEdit, TextBuffer, TailleBuffer + 1);

WriteFile(Fichier,TextBuffer,TailleBuffer,&Read,NULL);
// SetWindowText(hNote,"Document Sauvegardé");
}
CloseHandle(Fichier);
VirtualFree(TextBuffer, 0, MEM_RELEASE);
}
return ofn;
}


Merci!
jeudi 26 février 2004 à 14:10:01 | Re : Problème sauvegarde de fichier

sleeper41


J ai également essayer aver une taille buffer fixe mais ca marche pas ! :(
jeudi 26 février 2004 à 14:35:04 | Re : Problème sauvegarde de fichier

sleeper41

Désolé encore uine autre chise quand j essaie d afficher mon TextBuffer avec MessageBox(hEdit,TextBuffer,"Buffer",0); bah je n'ai rien! Je ne comprend pas pourquoi pourtant j ai bien mis un GetWindowText.
:(
jeudi 26 février 2004 à 16:25:00 | Re : Problème sauvegarde de fichier

BruNews

Administrateur CodeS-SourceS
Faut RESERVEr tes pages memoire, ajoute le OR sur le 3eme param de VirtualAlloc.

ciao...
BruNews, Admin CS, MVP Visual C++


Cette discussion est classée dans : fichier, ofn, hedit, secu, hnote


Répondre à ce message

Sujets en rapport avec ce message

probleme d'ouverture [ par catamenia ] bonjours, mon but est d'ouvrir un fichier.voici mon code :void CRobot1Doc::OnFileOpen()   {   CString c = "C:\\RobotEriccUsers\\";     CFileDialog tes CFileDialog [ par epoc ] J'ai un programme qui donne à l'utilisateur la possibilité d'enregistrer un fichier, via une boite de dialogue dont voici le code :CFileDialog m_SaveF [C++ / commdlg.h] Répertoire courant OPENFILENAME [ par GrosTony ] Salut @ tous,Dans le cadre d'un projet en cours, je doit gérer des enregistrements et chargement de fichier et je n'arrive pas à changer le répertoire Chaine de Caractère dans MsWord [ par sleeper41 ] Bonjour à tous!Voila Je cherhce un moyen d'envoyer une chaine de caractère à 'l'edit de word'.Je réussi à le faire avec NotePadHWND hNote("NotePad",0) probleme dans la lecture d'un fichier [ par jack_ryan ] bonjour,voila je cherche a ouvrir un fichier bmp et mon code ne semble pas avoir accés a tout le fichier je m'en remet a vous pour savoir si cela est Problème de manipulation de fichier [ par Mastersam ] Bonjour j'ai un problème de manipulation de fichier, voilà ce que j'utilise:char nomdufichier[MAX_PATH];struct FILE *fileproject;             OPENFILE 1 exe, même params, 2 résultats ! [ par Galmiza ] Salut, J'ai fait un programme qui visualise des fichiers de scenes 3D. Le chargement de la scene se fait ainsi.     g_pScene->LoadScene(strInputName OPENFILENAME [ par mat74 ] salut à tous, voila je voudrais ouvrir une boite dialogue pour enregistrer un fichier, récupérer la valeur de type, et rajouter un bouton suivant la v OPENFILENAME et fichier ini [ par raoulman ] Bonjour, Voilà le problème. J'ai une boîte de dialogue avec plusieurs EditBox et un bouton qui m'ouvre la boîte de dialogue "ouvrir" de Windows en ut


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales