c++ Dateiarbeit

Dieses Thema im Forum "C/C++" wurde erstellt von rdg, 08.01.2008.

  1. rdg

    rdg ???

    Dabei seit:
    12.10.2006
    Beiträge:
    357
    Zustimmungen:
    0
    Ort:
    Berlin
    Hi,

    brauch mal dringend Eure Hilfe!!!
    Ich muss ab einen bestimmten Verzeichnis alle Dateien inkl. der von den weiteren Unterverzeichnissen konvertieren, deshalb muss ich die Namen mit den Pfad in ein Array Speichern.
    Und da ich überhaupt keine Idee habe, wie ich dies machen kann wollte ich Euch um hilfe bitten.


    dank und gruß
    rdg
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 kotzkroete, 08.01.2008
    kotzkroete

    kotzkroete Doppel-As

    Dabei seit:
    22.10.2006
    Beiträge:
    132
    Zustimmungen:
    0
    Ort:
    /germany/berlin/zehlendorf
    Schreib doch ein Shellscript und uebergib nacheinander die Dateinamen an dein Programm.
     
  4. #3 juan_, 08.01.2008
    Zuletzt bearbeitet: 08.01.2008
    juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    hey,

    zwar kein C++, aber nen kleines Rubyscript, welches dir den Ordnerinhalt in ein Array schreibt:

    Code:
    #!/usr/bin/ruby
    dir = Dir.new(".")
    inhalt = []
    while entry = dir.read
    	if entry != "." && entry != ".."
    	inhalt.push entry
    	end
    end
    
    dir.close
    puts inhalt.sort!
    
    Geht vllt auch eleganter, aber mehr liegt im Moment nicht im Bereich meiner Möglichkeiten ;)
    Was du damit jetzt weiter anstellst, bleibt dir überlassen ;)

    ciao

    //edit:
    ach so, grad gesehen.. inkl. der Unterverzeichnisse. Das o.g. Script macht das jetzt erstmal nur in dem aktuellen Verzeichnis (also das, wo das Script liegt). Das kannst du natürlich umbasteln, indem du den "do-Zweig" in der if-Anweisung beauftragst, auch in "." bzw ".." zu suchen!
     
  5. #4 Lesco, 08.01.2008
    Zuletzt bearbeitet: 08.01.2008
    Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Das reicht nicht, da die Unterverzeichnisse nicht berücksichtigt werden, sondern lediglich das Überverzeichnis("..").

    Ich würde das ganze rekursiv lösen: Gehe jeweils den Inhalt des Verzeichnisses durch, falls du ein Unterverzeichnis findest, rufst du wiederum die selbe Funktion(in der du dich gerade befindest) mit dem Unterverzeichnis als Parameter auf.
    Der Zugriff an sich wird hier beschrieben: http://www.pronix.de/pronix-82.html
    Die Pfadnamen selbst kannst in einem std::vector speichern.
     
  6. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    wie meinst du? (:))
    könnte ich nicht einfach sagen,
    Code:
    i =+ 1
    if dir = "." || ".."
    dir#{i} = Dir.new("./.") 
    
    (bitte nicht versuchen.. nur gedanklich niedergetragen)

    oder so?

    also, dass ich die dir - variable in ner Zählschleife immer um den Faktor eins erweitere und das Skript dann dadurch im Unterverzeichnis wieder aufrufe?

    ciao
     
  7. Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Ich kann zwar kein Ruby, doch wo genau kommen denn dort die Unterverzeichnisse vor? ".." bezeichnet das übergeordnete und "." das aktuelle Verzeichnis.
     
  8. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    Hupps stimmt. Wie peinlich! Irgendwie habe ich da was verwechselt ;)

    Wenn man allerdings die Ordnerstruktur kennt, koennte man -mit ein bisschen Handarbeit- aber jedem Ordner einen Variable zuweisen und dann koennte man es doch hinbasteln. Ist aber halt leider nicht automatisch..

    ciao
     
  9. rdg

    rdg ???

    Dabei seit:
    12.10.2006
    Beiträge:
    357
    Zustimmungen:
    0
    Ort:
    Berlin
    Sorry, habe momentan kein Internet (Wechsel) deshalb muss ich alles im Internetcafe erledigen, echt beschissene Situation.
    Geht das auch mit C++ oder nur mit Ruby?
     
  10. Lesco

    Lesco segmentation fault

    Dabei seit:
    18.12.2005
    Beiträge:
    67
    Zustimmungen:
    0
    Ort:
    Hessen
    Meine Vorschlag mit der Rekursion funktioniert in C++ und eigentlich in jeder Sprache die ich kenne.
     
  11. #10 SkydiverBS, 09.01.2008
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    C++ bittet AFAIK selbst keine Funktionen für den Umgang mit Verzeichnissen, deswegen musst du auf C-Bibliotheken zurückgreifen. Lesco hat dir schon einen Link gepostet, wie man unter C mit Verzeichnissen arbeitet.

    Hier noch ein Verweis auf eine beispielhafte Implementierung in C++: Beispiel: Zugriff auf Verzeichnisse.

    Gruß,
    Philip
     
  12. #11 pferdefreund, 10.01.2008
    pferdefreund

    pferdefreund Doppel-As

    Dabei seit:
    26.12.2007
    Beiträge:
    144
    Zustimmungen:
    0
    ... oder einen find-befehl per pipe wieder einlesen und auseinanderdröseln
     
  13. mapiox

    mapiox Tripel-As

    Dabei seit:
    21.04.2002
    Beiträge:
    176
    Zustimmungen:
    0
  14. rdg

    rdg ???

    Dabei seit:
    12.10.2006
    Beiträge:
    357
    Zustimmungen:
    0
    Ort:
    Berlin
    erstmal vielen Dank für Eure Hilfe !!!
    Bin gerade daran sogut es mir ohne Internet möglich ist alles abzuarbeiten.

    vielen dank an Euch!
    rdg
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    Ok, ich habe weiter gelernt... wenn auch sehr langsam :)
    Hier ein rekursiver Ansatz:
    Code:
    def listdir(dir, intend=0)
    
    	d = Dir.new(dir)
    	while entry = d.read
    		path = dir + "/" + entry
    			if File.directory?(path)
    				puts "#{' ' * intend}[#{entry}]"
    				listdir(path, intend+2) if entry !~ /^\.{1,2}$/
    			else
    				puts "#{' ' * intend}#{entry}"
    			end
    	end
    		
    d.close
    end
    
    Dieser listet dir den Inhalt des aktuellen Verzeichnisses auf. Alle Unterordner werden in []-Klammern dargestellt und alles was sich darin befindet, wird eingerückt.

    In Kombination zum o.g kannst du jetzt mit der If-Schleife die "." und ".." ausblenden und in ein Array schreiben. Mit einer weiteren Modifikation könntest du auch die Unterordner ausblenden, und nur den Inhalt ausgeben.

    Ich hoffe, dass ich dir helfen konnte, auch wenn du nach C++ verlangt hast :)
    Vielleicht ist das ja ein brauchbarer Ansatz, sooo verschieden sollen die Sprachen ja garnicht sein.

    Jetzt müsste ich nur noch konvertieren können :S
     
  17. #15 der_Kay, 15.01.2008
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Muss das unbedingt C++ sein?
     
Thema:

c++ Dateiarbeit