Announcement

Collapse
No announcement yet.

Inhalt einer Datei löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Inhalt einer Datei löschen

    Hi,

    gibt es einen C# Befehl, mit dem man den Inhalt einer kompletten Datei sofort löschen kann, ohne die Datei selbst zu löschen (ist keine txt Datei). Habe bis jetzt nur File.Delete gefunden, aber das ist ja nicht das was ich brauche.
    Also suche also so eine "Löschfunktion", für die man nur eine Zeile braucht, um sie hinzuschreiben.

    LG

  • #2
    System.IO.File.Create(filename)

    bye,
    Helmut

    Comment


    • #3
      Originally posted by hwoess View Post
      System.IO.File.Create(filename)
      Was muss ich aber machen wenn ich bei der Datei die "Copy To Output Directory" Eigenschaft auf "Copy always" gestellt habe?
      Die Datei hat bei mir ja einen bestimmten Namen. Wenn ich File.Create(...) machen würde, kann ich ja kein Namen angeben. Aber ich muss ja nachher wieder Informationen aus der Datei herausziehen. Also brächte ich etwas, dass ausschließlich den Inhalt der Datei löscht und dann das ganze speichert.

      LG

      Comment


      • #4
        Welche Informationen willst Du aus einer leeren Datei lesen?
        Warum kann man bei Create keinen Namen angeben?
        Günther

        Comment


        • #5
          Ich möchte erst das löschen was drin steht und dann was neues reinschreiben, also im Prinzip überschreiben

          Comment


          • #6
            Was soll ich als Pfad angeben wenn ich die besagte Eigenschaft auf true gesetzt habe?

            Comment


            • #7
              "Copy To Output Directory" ist eine Property im Visual Studio bezüglich der Projektfiles und existiert außerhalb des VS gar nicht. Was willst du denn eigentlich genau machen? Deine bisherigen Infos sind ziemlich verwirrend.

              bye,
              Helmut

              Comment


              • #8
                Also ich möchte eine Datei haben, in die ich Daten reinschreiben kann. Da ich ja später nicht genau weiß, wo die Datei liegt und den ganzen Krams mit den SecurityExceptions habe ich die Copy To Output Eigenschaft auf true gesetzt. So kann ich ganz bequem auf die Datei zugreifen. Ab und zu will ich die Daten da drin überschreiben. Jetzt wusste ich nicht genau, wie ich File.Create einsetzen soll (eben wegen dieser Eigenschaft). Jetzt habe ich mir gedacht, dass die Datei einmalig existiert und es ausreichen würde den kompletten Inhalt zu löschen und alles wieder neu reinzuschreiben. Dann bin ich auf das Folgende gestoßen

                Ich habe beim Initialisieren des FileStreams FileMode.Truncate benutzt (vgl. MSDN), aber merkwürdigerweise passiert in der Datei nichts. Habe ich irgendwas vergessen?
                Code:
                FileStream stream = new FileStream("Quelle.csv", FileMode.Truncate, FileAccess.Write);
                            try
                            {
                                using (StreamWriter writer = new StreamWriter(stream))
                                {
                                    writer.AutoFlush = true;
                                    writer.BaseStream.Position = 0;
                                    //Die nachfolgende Schleife ist sinnlos, aber das 
                                    //Bemerkenswerte ist, dass sich nichts in der csv
                                    // Datei ändert
                                    for (int i = 0; i < 20; i++)
                                    {
                                        writer.WriteLine("1;1;");
                
                                    }
                                    //writer.Close();
                
                                }
                            }
                            //Privisorisch
                            catch (Exception d)
                            {
                                MessageBox.Show(d.Message.ToString());
                                
                            }

                Comment


                • #9
                  Versuche es in deinem Beispiel mal damit:
                  ...
                  FileStream stream = new FileStream(@"c:\Quelle.csv", FileMode.Create, FileAccess.Write);
                  ...

                  dann solltest du in deinem C-Laufwerk den File Quelle.csv mit entsprechendem Inhalt finden - bei mir war's zumindest so. Wenn nicht, machts du noch irgendwas anderes flasch.

                  bye,
                  Helmut

                  Comment


                  • #10
                    Ok, also das Problem dabei ist folgendes.
                    Wenn man als Parameter File.Create spezifiziert und das ganze dann debuggt, wird nochmal eine neue Datei erzeugt.
                    Bei mir ist es so: Die csv Datei liegt innerhalb des Projekts. Wenn das Programm gestartet wird, wird das Ganze zum Output kopiert und somit kann man daraus lesen.

                    Wenn man jetzt File.Create benutzt, dann erzeugt man im Unverzeichnis bin\Debug nochmal eine neue Datei. (auf das Verzeichnis c kann ich aus Sicherheitsgründen nicht zugreifen) Meine Frage ist aber: Wie komme ich an die Datei ran, die schon existiert, bei der ich aber "Copy to Output" auf "Copy Always" gestellt habe?
                    Denn sonst hätte ich die Datei ja doppelt und es würde auch nicht gehen, wenn ich einen Assembly erzeugen würde. Dann brächte ich ja auch noch im Unterverzeichnis bin\Release die Datei nochmal.

                    Comment


                    • #11
                      Keine Ideen?

                      Vllt zum Verständnis: Die eigentlichen Daten soll man ja in Environment.SpecialFolder.ApplicationData. Die Daten wo dann da drin legen sollen eigentlich nur gespeichert werden und beim nächsten Programmstart wieder verfügbar sein. Damit man beim Programmstart die gespeicherten Daten lesen kann, habe ich aus besagten Gründen die Copy To Output Eigenschaft auf Copy Always gesetzt.
                      Jetzt geht es eigentlich nur darum beim Beenden des Programms die entsprechenden Daten zu speichern (eben in dieser Datei, die in den Output kopiert wird).
                      Zuletzt editiert von Neodym; 06.03.2011, 20:33.

                      Comment


                      • #12
                        Du machst es Dir unnötig schwer.


                        Warum willst Du den Inhalt einer Datei löschen?



                        Dein Programm speichert beim Beenden diese Datei. Das sollte kein Problem sein.



                        Beim Starten prüft Dein Programm, ob diese Datei vorhanden ist. (FileExist). Ist sie da, wird sie eingelesen. Ist sie nicht da, startest Du mit Defaultwerten.



                        Wann und warum wird eine LEERE Datei benötigt?
                        Günther

                        Comment


                        • #13
                          Keine Ideen?
                          Nö. Ich kann deinem Problem nicht folgen. Irgendwie schmeißt du Designtime Geschichten(Copy to Output) mit Runtime Sachen(File, FileStream) durcheinander. Die beiden Sachen passieren zu verschiedenen Zeiten und haben keinen Zusammenhang.

                          Comment

                          Working...
                          X