Feste Zeile in datei löschen

Fridulin

Erfahrenes Mitglied
Hallo,

Ich möchte gerne eine Fetse Zeile (die Zeilen Zahl wird von einen Programm gesetzt) Löschen.
Wie kann man das ambesten machen mit dem StreamWriter?

Grüße und Danke

PS: Frohe Ostern!
 
Hallo Fridulin!

Ein Ansatz:
1. Mit StreamReader alle Zeilen in string - Array auslesen ("foreach" - Schleife)
2. Gewünschte Zeile löschen
3. String - Array mit StreamWriter in Datei (über-)schreiben
 
so, bitte sehr:

Code:
public void DeleteRowFromFile(String Filename, int Row)
{
	int i = 1;
	string line = null;
	StringBuilder sb = null;
	
	using( StreamReader sr = new StreamReader(new FileStream(Filename, FileMode.Open)) )
	{
		sb = new StringBuilder((int)sr.BaseStream.Length);

		while( (line = sr.ReadLine()) != null )
			if( Row != i++ )
				sb.Append(line).Append(Environment.NewLine);
	}

	using( StreamWriter sw = new StreamWriter(new FileStream(Filename, FileMode.Create)) )
		sw.Write(sb.ToString());
}
 
Hallo,

vielen Dank erstmal euch beiden, ich war gestern Nachmittag nicht mehr im Netz deswegen konnte ich da deines noch nicht lesen Caracho, ich habe es denn selber folgendermaßen gelößt:

void neuabspeich
Code:
ern(string [] arrZeilen, int auswahl)
{
StreamWriter sw = new StreamWriter(Application.StartupPath + "\" + "speicher.txt", 
alse);
int wieviele = inhalt.Items.Count;
int i = 0;
while (i < wieviele)
{
if (i != auswahl)
{
sw.WriteLine(arrZeilen[i]); 
}
i++;
}
sw.Close();


Die Variable auswahl ist das Item welches ich Ausgewählt habe in der ListBox, mit folgendem Code wird es gesetzt:


Code:
auswahl = inhalt.SelectedIndex;


Also vielen Dank nochmal für eure Hilfe!

Grüße
 
Hallo Leute,

ich habe diesen Thread noch einmal "ausgegraben" da der gepostete Code zwar funktioniert, aber leider nicht immer. Ich lasse in einer anderen Schleife eine Textdatei auslesen und sobald dort etwas übereinschtimmt, wird die Funktion aufgerufen. Leider löscht der Code immer nur ein paar Zeilen. Ich habe die Vermutung, daß die Funktion zu schnell von der anderen Schleife aufgerufen wird und deswegen klappt es nicht. Aber es ist nur eine wage Vermutung.
Wenn jemand eine Idee hat, oder ein ganz anderen Weg weiß wie man eine vordefinierte Zeile einer Textdatei löschen kann, würde ich mich sehr freuen wenn ihr dies Postet.

Viele Grüße und eine gute Nacht wünsche ich
Fridulin

PS: Ich habe Caracho's Funktion gebommen.
 
Zwar keine schöne Lösung, aber im Anhang findest einen entsprechenden Anhaltspunkt :)
 

Anhänge

  • 25882attachment.zip
    25,1 KB · Aufrufe: 120
Hallo,

vielen Dank für das Programm, der Programmtext funktioniert wunderbar.

Viele Grüße und vielen dank noch einmal
Fridulin
 
Hi,

mißt, da habe ich mich zufrüh gefereut. Ich habe dein Beispiel nocheinmal genauer Testen können. Auch dein Beispiel funktioniert leider auch nicht richtig.

Merkwürdigerweise um so mehr Zeilen er löschen soll um so mehr löscht er auch, aber wenn er nur 2 löschen soll, dann löscht er nur eine Zeile. Ein Fehler gibt er aber auch nicht aus. Beim nächsten Programm durchlauf löscht er die Zeile auch, die er beim ersten Durchlauf nicht gelöscht hat.
Der Aufruf der Funktion funktioniert Tadelos, das habe ich mehrfach getestet.
Code:
void zeileloeschen (int zeile)
		{
			
int count = 0;
count = zeile;
//MessageBox.Show(count + ""); << Nur zum Testen des Aufrufes.

			int currCount = 0;
			string s = null;
			try{
				
			
			if (count >= 0) 
			{
				StringBuilder sb = new StringBuilder();

				StreamReader sr = new StreamReader("anwesende.txt");
				while ( ( s = sr.ReadLine()) != null) 
				{
					
					if (currCount != count)
					{
					sb.Append(s + System.Environment.NewLine);
					}
					currCount++;
				}
				sr.Close();

				StreamWriter sw = new StreamWriter("anwesende.txt");
				sw.Write(sb.ToString());
				sw.Close();
				
			} 
			
			}
			catch{
				status.Text = "Fehler beim löschen in der Anwesenheitsliste";
				string waslos = "Fehler beim löschen in der Anwesenheitsliste";	
			string loginname = null;
			string loginpasswort = null;
			string loginip = null;
			log(loginname, loginpasswort, loginip, waslos);
			}

		}

Vielleicht hat ja jemand noch eine Idee, wie man das lösen könnte.

Viele Grüße und vielen Dank im Voraus.
Fridulin


---Edit:
Ich habe den Fehler nun gefunden. Sobald ich am Anfang der Datei eine Zeile löschen möchte und am ende, sowie dazwischen viele andere Zeilen sind, löscht er beide Zeilen wunderbar. Sobald die Zeilen dichter zusammen sind tut er dies nicht, also kann es nur daran liegen, daß der Funktionsaufruf zu schnell ist.

Falls jemand eine Idee hat wie man dies Lösen kann, wäre ich sehr Dankbar wenn er es hier postet.

Viele Grüße und vielen dank
Fridulin
 
Zuletzt bearbeitet:
Achtung, mein Testprogramm löscht eine Anzahl von Zeilen am Beginn einer Datei, nicht eine bestimmte Zeile. Das müsstest du entsprechend anpassen und sollte ansich auch kein Problem darstellen. Musst ja nur die Zeilen mitzählen ...
 
Zurück