Zum Inhalt springen

C# Ordner Inhalt mit Datei Inhalt vergleichen


Empfohlene Beiträge

Geschrieben

Hallo alle zusammen,

ich habe eine Frage zu meinem Problem an dem ich schon seit einer Woche fest hänge und einfach nicht mehr weiter komme. Ich hoffe Ihr könnt mir da helfen.

Also ich will den Inhalt eines Ordners mit dem Inhalt einer Textdatei vergleichen.

Beispiel: Im Ordner liegen 2 Bilder (123.jpg, 456.jpg) und in der Textdatei steht nur 123.jpg, jetzt soll das Bild (456.jpg) im Ordner in ein anderes verzeichnis verschoben werden, d. h. wenn ein Bild im Ordner liegt, aber nicht in der Textdatei vorhanden ist soll dieses Bild verschoben werden in ein anderes Verzeichnis. Habt ihr da mal eine Idee wie ich das machen kann?

mein bisheriger Code ist dieser:



            System.IO.DirectoryInfo dInfo;

            System.IO.FileInfo fInfo;

            System.IO.StreamReader sReader;

            List<string> lstFiles;


            try

            {

                if (txtOrdnerPfad.Text.Length > 0 && txtOrdnerPfad.Text != _TxtFolderTextAtStartup && txtTextdateiPfad.Text.Length > 0 && txtTextdateiPfad.Text != _TxtTextFileAtStartup)

                {

                    dInfo = new System.IO.DirectoryInfo(txtOrdnerPfad.Text);

                    if (!dInfo.Exists)

                        throw new NullReferenceException("Ordner existiert nicht oder ist schreibgeschützt");


                    fInfo = new System.IO.FileInfo(txtTextdateiPfad.Text);

                    if (!fInfo.Exists)

                        throw new NullReferenceException("Datei existiert nicht oder ist durch die Benutzung eines anderen Benutzer schreibgeschützt");


                    fInfo = null;

                    sReader = new System.IO.StreamReader(txtTextdateiPfad.Text);

                    lstFiles = new List<string>();

                    do

                    {

                        lstFiles.Add(sReader.ReadLine());

                    }

                    while (!sReader.EndOfStream);


                    foreach (string strFileName in lstFiles)

                    {

                        txtProtocol.Text += strFileName + " Existiert? --> ";

                        txtProtocol.Text += (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0;

                        txtProtocol.Text += Environment.NewLine;

                    }


Ich hoffe Ihr könnt mir helfen, bin für jede Hilfe dankbar.

Mit freundlichen Grüßen

Philipp

Geschrieben

SilentDemise' Antwort ist wenig hinzuzufügen.

Du solltest dir auf jeden Fall angewöhnen strukturiert zu arbeiten. So ein Spike hilft sicherlich immer, aber ohne Konzept verliert man schnell den Faden (bei Aufgaben dieser Größe natürlich eher nicht).

Kleiner Tipp: StreamReader implementieren IDisposable. Optimalerweise nutzt die hier ein using Statement.

Denke aber das ist noch etwas zu weit vom Thema her, kannst es aber bitte im Hinterkopf behalten bzw. deinen Ausbilder

mal drauf ansprechen warum / wieso.

LG Tobi

Geschrieben

Also mien direktes Problem ist:

In meiner textbox zur Ausgabe steht jetzt:

123.jpg Existiert ---> True

456.jpg Existiert ---> False

und alle was ein False haben sollen in ein anderes Verrzeichnis verschoben werden, weil der Abgleich funktioiert so wie er sein soll.

Hoffe Ihr könnt mir helfen.

Philipp

Geschrieben

Die Ausgabe True oder False ergibt sich aus

(from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0

Das ist ein bool-Ausdruck, den du so, wie er da steht, auch für ein where oder if benutzen kannst.

Geschrieben
Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf :(

Findest du nicht, dass man das in einem Jahr der Boardanwesenheit und diversen anderen Tipps hier langsam mal drauf haben sollte? Du bist doch in deiner Firma als Entwickler tätig, oder?

Das bisschen Code ist nun wahrlich kein Hexenwerk, bei aller Liebe.

Gruß, Goulasz

P.S.: Verstehst du diesen LINQ-Ausdruck, den du zur Bestimmung der Booleschen Variable nutzt, überhaupt? Wenn nein, wo hast du den her und warum hast du ihn unreflektiert kopiert?

Geschrieben
Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf :(

Im zweiten Post wurde Dir vorgeschlagen, den Ablauf in Worte zu fassen und ggf. als Aufzählung niederzuschreiben. Für jeden Punkt kann man dann den entsprechenden Code schreiben.

Geschrieben

@Goulasz:

Ich bin in miener Firma nicht nur als Entwickler tätig, ich habe noch viele andere Aufgaben, deshalb bleibt für die Prpgrammierung nur wenig Zeit und Luft.

@Ibm1305:

Danke nocheinmal für den Hinweis :)

der gepostete Code von mir funktioniert nur für den Vergleich, aber ich weiss nicht wie ich an die Werte von True und False komme, die ich hinter jeden Existiert --> schreibe, das ist das einizige Problem weil wenn die Werte False sind soll er sie ja verschieben.

Kannst du/ihr mir da helfen?

Geschrieben (bearbeitet)

schreibe doch mal bitte in punkten auf, welche schritte dein code macht?

bspw.

1. dateinamen aus txt-datei auslesen (hier gibt es die möglichkeit, dies zeilenweise zu machen oder alle auf einmal)

2. für jeden dateinamen aus der datei ...

3. operationen auf den aktuell selektierten dateinamen

...und hier musst du jetzt überlegen, wie der ablauf aussehen soll.

ansonsten kann man true und false auch als string ausgeben

der großteil hier wird dir die lösung nicht vorkauen, weil es dann keinen lerneffekt hat.

Bearbeitet von lbm1305
Geschrieben

Wenn du das LINQ-Statement in gesprochene Worte oder Pseudocode "umwandelst", wirst du sofort erkennen, nach welchen Kriterien "True" bzw. "False" gesetzt wird. Und falls du dich weiterhin so vehement dagegen sträubst, auf Hinweise einzugehen, die dazu dienen, dass du etwas lernst, kannst du ja weiterhin in einem der 2 anderen Foren, in denen du den selben Code ähnlich unselbstständig gepostet hast, bohren.

Vielleicht ist da jemand williger, dir die Lösung vorzukauen.

Ansonsten zitiere ich aus meiner Signatur:

[...]What we are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer.[...]

Gruß, Goulasz

Geschrieben
Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf :(

bool machWasDamit = (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0;

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...