MFC dialogue Enregistrer le fichier
Je suis en train d'écrire un MFC C++ application qui a un bouton Enregistrer sous pour enregistrer un .txt
fichier sur le disque. Avec elle, je suis en train d'ajouter un supplément de vérification pour le remplacement de fichiers (si un fichier avec le même nom de fichier existe, alors il doit demander à l'utilisateur s'il veut écraser l'ancien fichier ou pas). J'ai essayé avec le code ci-dessous, mais ça ne fonctionne pas vraiment. Quand je clique Pas sur la MessageBox, il doit rouvrir le Enregistrer en tant Que boîte de dialogue de fichier, mais au lieu de cela, il me donne deux erreurs: la première est Debug assertion failed
, et le second est Encountered an improper argument
. Comment dois-je faire mieux? C'est le code:
char strFilter[] = { "Text Files (*.txt)|*.txt|" };
CFileDialog FileDlg(FALSE, CString(".txt"), NULL, 0, CString(strFilter));
while(true)
{
if( FileDlg.DoModal() == IDOK ) //this is the line which gives the errors
{
agendaName = FileDlg.GetFileName(); //filename
agendaPath = FileDlg.GetFolderPath(); //filepath (folders)
if(model->agendaExists(CSToString(agendaPath+TEXT("\\")+agendaName))) //there is another file called the same way
{
if(MessageBox(TEXT("A file with the specified name already exists. Overwrite?"), TEXT("File exists"), MB_YESNO) != 6) //user clicked NO (do not overwrite file)
{
continue;
}
}
model->sendToFile(CSToString(agendaPath+TEXT("\\")+agendaName)); //the file is unique so the agenda named agendaName found at path agendaPath is saved
return;
}
}
Il convient de mentionner que les erreurs se produisent sur la ligne 7 et seulement sur la deuxième boucle à travers la while
.
OriginalL'auteur Adrian Marinica | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
CFileDialog peut détecter si un fichier existe et invite l'utilisateur à l'écrasement.
Juste passer OFN_OVERWRITEPROMPT pour les drapeaux.
Comme pour votre problème, exécutez dans le Débogueur et quand vous obtenez une affirmation appuyez sur le bouton Réessayer pour voir d'où vient le problème (vous aurez probablement à regarder à travers la pile d'appel). Peut-être que vous devriez essayer de mettre cela dans la boucle while:
OriginalL'auteur Marius Bancila
Vous devez utiliser le
OFN_OVERWRITEPROMPT
drapeau dans le constructeur. Le drapeau est généralement l'un des drapeaux par défaut, mais vous avez défini vos drapeaux à 0. Donc, si vous n':Il devrait fonctionner. Par la voie,
GetPathName()
obtient le chemin d'accès complet vers le fichier sélectionné, de sorte que vous n'avez pas besoin de récupérer le dossier et le nom de fichier en 2 étapes.OriginalL'auteur MikMik
Essayer y compris en dessous de la ligne à l'intérieur de la boucle while (tant que première ligne dans la boucle while)
Cette ligne est en dehors de la boucle while dans votre code
OriginalL'auteur Ankur