Bonjour,
J'ai véveloppé un programme qui écrit des données dans un fichier temporaire nommé "output.tmp" ..
Quand on ferme le programme, je donne à l'utilisateur la possibilité de sauvegarder ces données en renommant le fichier et j'utilise le code suivant :
Cela fonctionne si le nom du fichier donné est nouveau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { String^ file_name = gcnew String(""); file_name = saveFileDialog1->FileName::get(); File::Move ("output.tmp",file_name); }
Par contre si le fichier existe déjà, ça plante même si on a répondu qu'on accepte de remplacer le fichier.
J'ai donc rajouté :
Et ça plante toujours comme si l'instruction rajoutée n'était pas exécutée ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { String^ file_name = gcnew String(""); file_name = saveFileDialog1->FileName::get(); if (File::Exists (file_name)) File::Delete (file_name); File::Move ("output.tmp",file_name); }
J'ai eu l'impression que Windows exécute le Move avant le Delete ...
Pour m'en assurer j'ai fait une horreur du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { String^ file_name = gcnew String(""); file_name = saveFileDialog1->FileName::get(); if (File::Exists (file_name)) File::Delete (file_name); a: if (File::Exists (file_name)) goto a; File::Move ("output.tmp",file_name); }
Et là ça marche
J'ai donc plusieurs questions:
1- Pourquoi avec la forme simple le saveFileDialog ne détruit pas lui même le fichier existant quand on lui dit qu'on accepte le remplacement?
2- Pourquoi le Move s'exécute apparemment avant le Delete?
3- Comment faire ça proprement?
Merci d'avance à ceux qui pourront éclairer ma pauvre lanterne.
Bonne journée.
Partager