Hi @ All
mein Problem diesmal:
(Und kommt mir jetzt bitte nicht mit der Forumsuche, die Kenn ich !! Hier gibts in der Richtung nichts 🙂).
Ich möchte meine Favoriten in mein Programm importieren.
Nun sehen aber Favoriten "meistens" / aber eben nicht immer so aus:
eine kleine Textdatei mit Extention: URL und folgendem Inhalt:
[DEFAULT]
BASEURL=http://www.mycsharp.de/wbb2/
[InternetShortcut]
URL=http://www.mycsharp.de/wbb2/
Modified=6061A4764070C60152
Die Zeile unter [InternetShortcut] ändert sich stetig, halt pro Favorit.
Wie kann ich genau nur diese Zeile darunter bekommen ?
Wie ich einlese und hinterher damit verfahre weis ich
string path = System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
this.info_panel.Text = "Lade Favoriten...";
string[] favs = Directory.GetFiles(path, "*.url", SearchOption.AllDirectories);
foreach (string inhalt in favs)
{
TextReader tr = new StreamReader(inhalt.ToString());
// Hier komm ich nicht weiter ;)
}
Ich öffne hinterher eine kleine Textdatei, welche die ganzen Urls beinhaltet und importiere diese dann in meinen Browser.
Ich währ euch echt dankbar, über eine Hilfestellung.
´//Edit: Nach meiner Meinung bringt REGEX auch nichts, weil sich ja die URL ständig ändert !?
ALEX
---- >
Keine Signatur 😉
Original von axelfxxx
´//Edit: Nach meiner Meinung bringt REGEX auch nichts, weil sich ja die URL ständig ändert !?
Doch, das ist ja genau der Sinn von RegEx 🙂
Die betreffende RegEx müsste so ungefähr aussehen - zumindest nach Standard-POSIX-Syntax: ^URL=.$ - anschließend kann man mit $1 auf das zugreifen, was unter . stand. Weiß allerdings nicht, wie das jetzt genau bei C# aussieht...
Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.
Hallo,
Du könntest mit tr.ReadLine in einer Schleife die einzelnen Zeilen auslesen. Wenn der gelesene String "[InternetShortcut]" ist, noch eine Zeile lesen: das ist Deine!!
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Danke erstmal an Alle 😉
Ich hab mit REGEX nocht nicht gearbeitet, aber wie ginge das mit dem ReadLine ?
Nur so ungefähr, den Rest mach ich dann !?
Alex
---- >
Keine Signatur 😉
Hallo,
etwa so:
string result = tr.ReadLine();
while((result != null) && (result != "[InternetShortcut]"))
{
result = tr.ReadLine();
}
if(result!=null)
{
result = tr.ReadLine();
}
if(result!=null)
{
// result enthält jetzt die gesuchte Zeile!!
}
// die !=null Abfragen dienen nur zur Sicherheit, auch wirklich die Daten bekommen zu haben.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo axelfxxx,
aber wie ginge das mit dem ReadLine ?
hm, wenn ich so Fragen sehe, denke ich immer: Da hat einer noch nie ein C#-Buch gelesen und will sich vom Forum C# beibringen lassen. Kein guter Weg, weder fürs Forum noch für dich. Mal abgesehen davon, dass ein Blick in die SDK-/MSDN-Doku hier wohl schon geholfen hätte.
Ansonsten sieht mir das nach einem ziemlichen Gebastel aus. Die Datei hat doch das Ini-Format. Um solche Dateien auszulesen, gibt es fertige Lösungen. Sogar eine hier im Forum: IniReader . Zeitgemäßer wäre natürlich XML.
herbivore
Danke herbivore,
für die ausführliche Erklärung: Aber wie man StreamReader.ReadLine() in solchen Situationen anwendet, habe ich in den Büchern die ich bis jetzt gelesen habe nicht gefunden: (z.B. O'REILLY - Programmieren mit C#) Ansonsten war mir die Handhabung dieses Befehls schon vertraut.
Vielen Dank an MARSSTEIN 😉 Hat Alles bestens geklappt !!
Für die Leute, die Ohne "Viel gebastel" die Favoriten in Ihr programm importiert haben wollen: Hier der Quellcode.
private void favoritenImportierenToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
string path = System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
this.info_panel.Text = "Lade Favoriten...";
string[] favs = Directory.GetFiles(path, "*.url", SearchOption.AllDirectories);
foreach (string inhalt in favs)
{
TextReader tr = new StreamReader(inhalt.ToString());
string result = tr.ReadLine();
while ((result != null) && (result != "[InternetShortcut]"))
{
result = tr.ReadLine();
}
if (result != null)
{
result = tr.ReadLine();
}
if (result != null)
{
result = result.Replace("URL=","");
tr.Close();
tr.Dispose();
// Die favoritenTextDatei öffnen und das RESULT einbauen
TextWriter tw = new StreamWriter("C:\\fav.txt", true);
tw.WriteLine(result);
tw.Flush();
tw.Close();
tw.Dispose();
}
// die !=null Abfragen dienen nur zur Sicherheit, auch wirklich die Daten bekommen zu haben. (MarsStein)
}
}
catch(System.Exception err)
{
MessageBox.Show(err.ToString());
}
finally
{
this.info_panel.Text = "Favoriten erfolgreich importiert!";
}
}
Jetzt nur noch die TextDatei am Start des Browsers, per DropDownOpening() einlesen 😉
private void favoriten_box_DropDownOpening(object sender, EventArgs e)
{
try
{
if (File.Exists("C:\\fav.txt"))
{
this.favoriten_box.DropDownItems.Clear();
StreamReader sr = File.OpenText(@"C:\\fav.txt");
string lineInput;
lineInput = sr.ReadLine();
while (lineInput != null)
{
this.favoriten_box.DropDownItems.Add(lineInput);
lineInput = sr.ReadLine();
}
sr.Close();
}
else
{
MessageBox.Show(this, "Noch keine Favoriten vorhanden!"
+ System.Environment.NewLine + "Sie können eine Favoriten - Datei erstellen,"
+ System.Environment.NewLine + "indem Sie im Browser auf (FAVORITEN HINZU)"
+ System.Environment.NewLine + "oder auf Importieren klicken", "Lesefehler", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (System.Exception err)
{
MessageBox.Show(err.ToString());
}
}
MFG
Alex
---- >
Keine Signatur 😉