Je fais un lecteur de musique. Il a 2 formes; l'un est la zone principale où vous jouez de la musique. Le second formulaire contient une CheckedListBox dans laquelle vous sélectionnez les mp3 que vous voulez . Lorsque je clique sur un bouton, il enregistre la sélection dans un fichier .txt afin que je puisse y accéder dans le premier formulaire, où je placerai les chaînes les chemins pour que le lecteur de musique trouve les fichiers.
C'est le code de ma deuxième forme, où je sauvegarde les chansons sélectionnées dans des fichiers .txt.
private void selectbtn_Click(object sender, EventArgs e)
{
if (File.Exists(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt"))
{
File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", String.Empty);
}
string[] checkedtitles = new string[checkedListBox1.CheckedItems.Count];
for (int ii = 0; ii < checkedListBox1.CheckedItems.Count; ii++)
{
checkedtitles[ii] = checkedListBox1.CheckedItems[ii].ToString();
}
string selectedSongs = String.Join(Environment.NewLine, checkedtitles);
songRecord.writeRecord(selectedSongs); //I initialised the class containing streamwriter/reader, and called it songRecord
this.Close();
}
Le problème est que, chaque fois que je ferme le programme et que je l'ouvre à nouveau, je ne peux pas réécrire/effacer le fichier .txt. Il ajoute simplement au fichier existant. Y a-t-il quelque chose que je ne fais pas bien?
Voici mes codes streamreader/writer. Je suis sûr que je l'ai fermé après avoir couru aussi, mais peut-être que quelqu'un peut comprendre ce qui ne va pas:
namespace songss
{
class DataRecord
{
public void writeRecord(string line)
{
StreamWriter sw = null;
try
{
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
}
catch (FileNotFoundException)
{
Console.WriteLine("Error: File not found.");
}
catch (IOException)
{
Console.WriteLine("Error: IO");
}
catch(Exception)
{
throw;
}
finally
{
if (sw != null)
sw.Close();
}
}
public void readRecord()
{
StreamReader sr = null;
string myInputline;
try
{
sr = new StreamReader(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt");
while ((myInputline = sr.ReadLine()) != null) ; //readline reads whole line
Console.WriteLine(myInputline);
}
catch (FileNotFoundException)
{
Console.WriteLine("Error: File not found");
}
catch(IOException)
{
Console.WriteLine("Error: IO");
}
catch (Exception)
{
throw;
}
finally
{
if (sr != null)
sr.Close();
}
}
}
}
File.WriteAllText devrait faire ce que vous voulez.
Crée un nouveau fichier, écrit la chaîne spécifiée dans le fichier, puis ferme le fichier. Si le fichier cible existe déjà, il est écrasé.
La classe StreamWriter a aussi une option pour écraser/ajouter:
Initialise une nouvelle instance de la classe StreamWriter pour le .__ spécifié. fichier en utilisant l'encodage et la taille de tampon par défaut. Si le fichier existe, il peut être écrasé ou ajouté.
public StreamWriter(
string path,
bool append
)
Exemple:
using (StreamWriter writer = new StreamWriter("test.txt", false)){
writer.Write(textToAdd);
}
En regardant votre code, vous passez true
qui signifie ajouter.
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
Si vous êtes bloqué sur une version .NET qui ne prend en charge rien (par exemple, un cadre compact), vous pouvez également implémenter vous-même WriteAllText
:
static void WriteAllText(string path, string txt) {
var bytes = Encoding.UTF8.GetBytes(txt);
using (var f = File.Open(path, FileMode.Create)) {
f.Write(bytes, 0, bytes.Length);
}
}
Consultez ce lien pour la solution fournie par Microsoft: ( Https://msdn.Microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx )
Voici le code pour ajouter un fichier existant:
StreamWriter writer = File.AppendText(Filepath);
writer.WriteLine(content);
writer.Close();
Utilisez ceci
File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", line);
au lieu de
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);