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 :

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);
}
Cela fonctionne si le nom du fichier donné est nouveau.
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é :

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);
}
Et ça plante toujours comme si l'instruction rajoutée n'était pas exécutée ...

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.