Hallo Zusammen,
ich bin gerade dabei ein Programm zu schreiben das einen Bestimmten Ordner nach .pst Dateien durchsucht, und diese mir in einem Array ausgibt. Soweit alles gut.
Jetzt kommen wir aber auch schon zum Knackpunkt.
Ich möchte die Inhalte aus dem Array ausgeben, der User soll eine Datei auswählen und diese soll dann auf einen USB STick kopiert werden.
Das kopieren funktioniert, das ist nicht das Problem aber ich kann nicht auf die einzelnen Array Inhalte zugreifen.
Die Ausgabe sollte wie folgt aussehen:
Welche Datei soll kopiert werden?
1: PST1
2: PST2
...
Dann gibt der Benutzer die Zahl ein und das ganze wird kopiert.
Aber ich kann nicht richtig auf das Array zugreifen.
Console.WriteLine("Welche Datei soll kopiert werden");
string[] files = Directory.GetFiles(@"C:\Users\" + user + "\Desktop");
foreach(string file in files)
{
if(file.ToLower().EndsWith(".pst"))
{
Console.WriteLine(file);
}
}
outlook_profile_number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(@"Folgende Datei wurde ausgewählt C:\Users\" + user + "\Desktop" + files[outlook_profile_number]);
//Danach soll der Kopier befehl gestartet werden, den habe ich auch und der funktioniert ohne Probleme
Könnt ihr mir evtl sagen wo das Problem ist ich werde aus Google einfach nicht schlauer -.-
Viele Grüße gh0striderBB
Was kommt denn für ein Fehler? Grob beim Überblicken sehe ich keinen Fehler.
Den sehe ich eher da wo du deinen String zusammen stückelst. Du musst bei allen Teilstrings wie beim ersten ein @ voranstellen.
Beim auslesen des Arrays musst du auch darauf achten, dass ein Array bei Index 0 anfängt. Wenn Datei 1 mittels "1" auszuwählen ist musst du also auf das Array mit dem Wert der Eingabe - 1 zugreifen.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Das Problem ist das ich nicht über die eingabe nur auf das Array zugreifen kann sondern das er mir auf alle Dateien vom Desktop zugreift
Dann liegt dein Problem aber nicht beim Array sondern beim String allgemein. - Was heißt auf alle Dateien?
Allerdings solltest du dir wegen dem Pfad noch mal Gedanken machen. - Ich würd dir was in der Richtung vorschlagen:
string sPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Damit ersparst du dir das String gepfusche. Für den Zugriff auf die Datei arbeitest du dann am besten mit Path.Combine siehe:
sFileToCopy = Path.Combine(sPath, files[outlook_profile_number]);
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ich kann dir nicht ganz folgen aber Debugge einfach mal das Programm und guck was in dem Array ist, überprüfe deinen Index usw. Dann solltest du recht schnell auf das Problem stoßen. Pfade am besten per Path.Combine zusammen setzen
Das mit dem Desktop war nur ein Beispiel, weil standardmäßig liegen die .Pst Archive von Outlook ja unter AppData/Local/Microsoft/Outlook
Allerdings komm ich mit dem einbau in meine Syntax noch nicht so ganz klar? HabNurAnfängerWissen
Ich steh grad echt voll im Wald. Könnt ihr mir einen kleinen Denkanstoß geben?
inflames2k hat Dir doch schon den ausschlaggebenden Hinweis gegeben. Was brauchst noch?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Wie ich das ganze jetzt in meinen Code einbauen muss. Ich hab es an unterschiedlichen Stellen versucht aber hat zu keinem Erfolg geführt
Die folgende Code Zeile hat doch die Funktion, das er den Ordnerpfad angibt wo gesucht werden soll oder?
string sPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Das ist ja dann die Ausgabe auf die der User Antworten muss oder?
sFileToCopy = Path.Combine(sPath, files[outlook_profile_number]);
Und wenn ich das dann so gemäß meinem Verständniss in den Code einbaue hab ich die selbe Funktion wie ich schon davor hatte. (Ich habe eine .json Datei auf dem Desktop liegen und 3 .pst Dateien.
Meine Ausgabe die ich bekomm:
Er Zeigt mir 3 .pst Dateien an wenn ich aber auf 1 Drücke gibt er mir den Name von meiner JSON Datei aus.
Hier mein geänderter Code
Console.WriteLine("Welche Datei soll kopiert werden");
string[] files = Directory.GetFiles(@"C:\Users\" + user + @"\Desktop");
string sPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
foreach(string file in files)
{
if(file.ToLower().EndsWith(".pst"))
{
//Verarbeitung
Console.WriteLine(file);
}
}
outlook_profile_number = Convert.ToInt32(Console.ReadLine());
string sFileToCopy = Path.Combine(sPath, files[outlook_profile_number]);
Console.WriteLine(sFileToCopy);
//Danach soll der Kopier befehl gestartet werden, den habe ich auch und der funktioniert ohne Probleme
Console.ReadKey();
Ist doch klar
string[] files = Directory.GetFiles(@"C:\Users\" + user + @"\Desktop");
gibt die alle Dateien auf dem Desktop.
Durch
if(file.ToLower().EndsWith(".pst"))
{
//Verarbeitung
Console.WriteLine(file);
}
werden nur die Dateien ausgeben, die du haben möchtest.
files[outlook_profile_number]
hier greifst du aber wieder auf das Array mit allen Dateien zu.
Sinnvoll wäre es vorher schon so zu Filtern, dass in deinem Array nur die Dateien sind, die du tatsächlich brauchst.
Du hast nur die Hälfte von inflames2k's Hinweisen glesen:
- Ah!! - Jetzt sehe ich wo es bei dir hängt. - Wenn du den 2. Parameter von Directory.GetFiles mit "*.pst" belegst, sollte das Array anschließend nur solche Dateien enthalten.
Hallo gh0striderBB,
da du ja scheinbar nicht selbst dahinter kommst:
// Ordnerpfad für Desktop ermitteln
string sPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
// alle *.pst-Dateien aus dem Pfad ermitteln
// Betonung liegt auf der Dateiendung und dem von mir genannten 2. Parameter!
string[] files = Directory.GetFiles(sPath, "*.pst");
Gibst du den 2. Parameter nicht mit an, werden natürlich alle Dateien auf dem Desktop in das Array gepackt. - Und die verschwinden auch nicht durch Magie nur weil du sie nicht für die Auswahl mit ausgibst.
Ein netter Nebeneffekt ist, dass du deine Prüfung auf die Dateiendung damit auch weglassen kannst.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Achso ja klar das hab ich übersehen
*kopfgegenwandhau*
Das funktioniert jetzt (Y)
Wenn ihr mir jetzt noch einen kleinen Tip habt:
Wie kann ich vor die ausgabe noch eine Zahl setzen. Aktuell wird einfach nur der Datei Name ausgegeben.
PST1
PST2
PST3
Ich hätte aber gerne die ausgabe wie folgt:
1: PST1
2: PST2
3: PST3
Zum Beispiel so:
int i = 0;
foreach(string file in files)
{
//Verarbeitung
Console.WriteLine(i + ": " + file);
i++;
}
Super Perfekt für eure Hilfe jetzt funktioniert alles (Y)
1000. Dank
Mit Stringverkettung, String.Format() oder Stringbuilder.
Siehe dazu auch [Artikel] Strings verketten: Performance-Betrachtung.
Das sind aber grundlegendste Grundlagen, die du einfach durch ein Buch lernen musst!
Wenn du mit Dateien rumpfuschst, aber das nicht weißt, machst du was beim Erlernen der Sprache falsch!