Lange Dateinamen die größer wie 260 zeichen sind auflisten und in Textfile schreiben

  • C#
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Karton.

    Lange Dateinamen die größer wie 260 zeichen sind auflisten und in Textfile schreiben

    Hallo NG,

    da ich C# und VB.Net Anfänger bin benötige ich eure Hilfe. Ich soll in unserem Netzwerk auf unserem Fileserver die Laufwerke und Ordner ermitteln die größer wie 260 Zeichen sind.
    Wie gehe ich dies an..

    Danke für eure Hilfe

    Gruß Karton

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo Karton,

    was genau hast du denn schon? Oder anders gefragt, wie weit reichen deine Kenntniss bisher?

    Also grob müsstest müsstest du - beginnend vom obersten Verzeichnis - alle Datein und Unterverzeichnisse durchlaufen (mit einer Schleife) und die Stringlänge der Dateinamen(und/oder Ordernamen) prüfen. Sind diese Dateinamen(bzw. Ordnernamen) über 260 Zeichen lang (das kannst du beispielsweise mit einer IF-Bedingung ermitteln), schreibst du diese Namen in eine Textdatei.
    Zur Ermittlung der Namenslänge, gibt es für jedes File z.b. die Eigenschaft

    Quellcode

    1. String.Length
    (msdn.microsoft.com/library/sys…ing.length(v=vs.110).aspx).

    Wie man Verzechnisse durchläuft, findest du garantiert im Forum(einfach mal die Suche bedienen). Das ist eigentlich immer ein recht beliebtes Thema hier.
    Hallo wertherchen und VB1963,

    Angefangen hab ich noch gar nicht bin am überlegen ob mit dot.net zu tätigen oder c#. String.Length und das ganze mit Schleife zu tätigen war meine Überlegung auch gewesen.
    Was benötige ich noch?

    Imports System File?

    Für die spätere Deklaration?

    Ich wollte das ganze über eine kleines Formular mit FilePath wo ich das Laufwerk auswählen kann wo die Daten gesucht werden tätigen.
    Ein Suchen Button und das Ergebnis in einem Textfile anzeigen lassen inkl. länge des Pfades.

    Alternativ welche Möglichkeite hätte ich da noch eventuell es mir in der Form anzeigen zu lassen im Listview? DataGrid?

    Eure Infos schaue ich mir gerne an.

    Und vorab Danke für eure Hilfe

    LG Karton
    @Karton Willkommen im Forum. :thumbup:
    Wenn Du jetzt die Wahl hast UND Du Dich mit Programmierung befassen willst, machst Du das besser in C#, da VB.NET aus Kompatibilitätsgründen zum älteren VB6 zu viele Fallstricke für Anfänger drin hat:
    • Option Strict Off (böse)
    • Form2.Show() (böse)
      ...
    Wenn Du über etwas Erahrung im Programmieren verfügst, kannst Du auch in beiden Sprachen arbeiten, zumindest lesen solltest Du die andere können, um alle Snippets verwenden zu können, Übersetzer gibt es da mehrere.
    Das ListView streichst Du gleich aus Deinem Wortschatz, das ist ein Relikt aus der Steinzeit.
    Ansonsten ist das ganze recht simpel.
    Liste die FileInfo aller Dateien auf, pack sie in eine DataTable, filtere die heraus, die Deine Bedingungen erfüllen und weise die Tabelle einem DataGrigView als DataSource zu.
    Feddich.
    Das sind nicht mehr als 15 Zeilen.
    Schaffst Du das ansatzweise allein?
    Probiere ein wenig, poste Deinen Code und wir reden drüber.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @seh ja

    Ich hab aber ein kleines feines Tool gefunden was genau das macht was ich vorhabe zu programmieren :). Long Path Tool.... Kopieren und Löschen benötige ich nicht nur die Eingabe der Länge sowie Pfad Auswahl und Export in eine Text - Datei. Ich werde zumindest die Oberfläche(GUI) so mal gestalten.

    Karton schrieb:

    @RodFromGermany danke für die Info also mit Programmierung möchte ich mich gerne befassen. Ich weiß zwar was ne IF Schleife ist aber zur Zeit auch nicht mehr also blutiger Anfänger.....
    Ich werde bisserl ausprobieren. Mit den Beispielen von @VB1963 und @wertherchen hoffe ich es das ich es hinbekomme und mit deiner Hilfe.


    Nur mal so nebenbei: http://www.if-schleife.de/ :D
    @Karton Da lief schon mal ein Thread zu langen Dateinamen. Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany hab ich gelesen ist aber viel zu kompliziert nach meiner Meinung...
    Ich hab es wie folgt gelöst.

    1 Form darauf eine Textbox und ein Button und eine Listbox zur Anzeige. Der zweite Button ist für das Ergebnis in eine Textfile zu schreiben aber soweit bin ich noch nicht.

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
    4. {
    5. string pth = folderBrowserDialog1.SelectedPath;
    6. if (Directory.Exists(pth))
    7. {
    8. string[] files = Directory.GetFiles(pth, "*.*", SearchOption.AllDirectories);
    9. listBox1.Items.Clear();
    10. //listBox1.Items.AddRange(files);
    11. foreach(string file in files)
    12. {
    13. if(file.Length > Convert.ToInt32(textBox1.Text))
    14. {
    15. listBox1.Items.Add(file);
    16. }
    17. }
    18. }
    19. }
    20. }
    21. }
    22. }


    Funktioniert soweit ganz prima jetzt bräuchte ich nur noch einen Ansatz wie ich die angezeigten Daten in der Listbox in ein Textfile geschrieben bekomme.

    @wertherchen *lol*

    Danke an euch für eure Hilfe.... und vorab ein schöne Feiertage...

    Karton
    Na das ist doch auch nicht schwer.
    Da du ja schon alle Daten in der ListBox hast, machst du ein foreach auf die Items Property von der Listbox, erstellst dir davor noch einen FileStream und einen StreamWriter und schreibst in der foreach mit dem StreamWriter die jeweilige Zeile in der ListBox.

    Also deine Stichworte sind: ListBox.Items, FileStream, StreamWriter.

    Karton schrieb:

    C#-Quellcode

    1. if(file.Length > Convert.ToInt32(textBox1.Text))
    Nimmst Du ein NumericUpDown.
    Wenn Du die Namen in eine RichTextBox packst, kannst Du die mit deren eigenen Methoden in einem Einzeiler speichern und laden (findest Du selber).
    =====
    Sorry, ich hatte Dein Problem komplizierter verstanden als es ist.
    Die 260-Zeichen-Grenze ist eine alte DOS-Grenze, wo Dateinamen nur 8 Zeichen und der komplette Pfad nur maximal 260 Zeichen lang sein durften.
    Unter XP glaub ich wurden dann "lange Dateinamen" eingeführt, die zu noch längeren Pfaden führten, wo es dann zu Problemen führte.
    Das ist bei Dir nicht relevant. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry für die späte Antwort hatte bisserl Streß in der Firma.... Wie gesagt sollte nichts großes sein und unseren Fileserver per Dienst überwachen und in eine Textfile schreiben wenn jemand einen Ordner oder Pfad anlegt der halt größer ist als 260 Zeichen. Da unser Backup wohl Probleme damit hat.
    @seh @RodFromGermany und allen anderen Danke für eure Hilfe.

    LG
    Karton