Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

  • Autor

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

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?

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.

  • Autor

@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?

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.