L'écriture d'un fichier TEXTE à l'aide de C#
Je suis en train d'ajouter un SaveFileDialog à mon Application Windows, dans lequel j'ai enregistrer un simple fichier texte à partir du contenu d'une zone de texte multiligne. Le programme semble bien fonctionner jusqu'à la zone de dialogue enregistrer, et je ne reçois pas toutes les erreurs, mais une fois que je clique sur le bouton enregistrer l'application se bloque. Le seul moyen de s'en sortir est de cliquer sur le "stop-débogage" bouton. Voici les articles du code que j'ai essayé, mais à la fois de créer le coup même:
private void button_SaveToFile_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(saveFileDialog1.FileName, textBox_ListDestination.Text);
}
}
et
private void button_SaveToFile_Click(object sender, EventArgs e)
{
Stream myStream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
File.WriteAllText(saveFileDialog1.FileName, textBox_ListDestination.Text);
myStream.Close();
}
}
}
- Si vous avancez dans le code.. quelle ligne est-il accrocher à l'?
- Il y a un autre moyen de s'en sortir, quand il se bloque - appuyez sur les touches Ctrl + Alt + Pause. Cette ligne, je pense, le problème
if ((myStream = saveFileDialog1.OpenFile()) != null)
- Supprimerif
condition. - Comment faire étape à l'aide du code? Désolé..toujours là pour apprendre. Je viens de tester à nouveau, et il semble se bloquer pendant environ 1 à 2 minutes, puis revient à la normale...le fichier texte ne devrait pas être plus de 10 kb.
- L'utilisation de google et de trouver un tutoriel vidéo "comment déboguer à l'aide de visual studio"
- Essayez de faire est le bloc-notes, Fichier + Enregistrer sous. Si vous ne voyez pas de délai de changement de la Plate-forme de fixation de la cible de votre projet à AnyCPU. Si cela résout le problème, alors vous avez une extension de shell sur votre machine qui provoque ce problème.
- Le premier fonctionne très bien pour moi. Peut-être vous avez des problèmes de contrôle de compte d'utilisateur?
Vous devez vous connecter pour publier un commentaire.
Jeagr,
Je n'ai aucun problème lorsque j'essaie de recréer le problème à l'aide de votre premier exemple de code. Si je devais deviner, vous pouvez avoir des problèmes avec l'allocation de la mémoire de travail (avec des ressources non managées) couplé avec plusieurs tentatives de débogage, et peut-être ré-enregistrer pour le même fichier sur et plus peut-être laissé un mauvais pointeur de fichier.
Deuxième exemple ne fonctionnera pas. Lorsque vous appelez Fichier.WriteAllText, il s'ouvre, écrit et ferme le fichier automatiquement pour vous. (Lire ici: http://msdn.microsoft.com/en-us/library/system.io.file.writealltext.aspx)
Lorsque vous appelez OpenFile, vous de placer un verrou sur le fichier. Dans votre code, lors de Fichier.WriteAllText est exécuté, il explose parce que le fichier est déjà en cours d'utilisation. Si vous souhaitez travailler avec votre fichier à l'aide de OpenFile, alors vous devrez changer de façon de travailler avec le fichier. Voici un exemple: http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.openfile(v=VS.71).aspx Remarque combien l'exemple ferme le fichier, si vous vouliez faire le travail dans le fichier, vous devez écrire le code que le travail avant la CloseFile méthode est appelée.
Si vous voulez un exemple sur la façon de travailler avec un fichier à l'aide de OpenFile, il devrait y avoir un couple d'exemples sur internet, mais en fonction de votre besoin, je pense que Fichier.WriteAllText fonctionne.
De retour pour le premier exemple.
Si vous frappez le code plusieurs fois au cours de débogage, ma seule suggestion serait pour envelopper le SaveFileDialog dans une 'aide' instruction. Cela peut vous aider dans le système d'accrochage, et un peu de débogage.
Bien que je ne pas utiliser le C# mais le C++, j'ai EU ce problème (à savoir la boîte de dialogue n'apparaît pas à tous). Résolu par mise à zéro toute la structure OPENFILENAME, puis le remplissage des membres que je n'ai besoin. En fait, pas de réinitialisation des structures avant d'invoquer des boîtes de dialogue communes a également un problème avec la boîte de dialogue imprimer.
J'ai fini à l'aide du code ci-dessous pour obtenir que cela fonctionne. Le code "ShowHelp = true" est ce qui a résolu le problème, et puis un peu de l'optimisation conduit à la solution suivante: