[B3D]Texturen aus B3D File lesen, suchen und kopieren

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

antome

!!! gesperrt !!!

Betreff: [B3D]Texturen aus B3D File lesen, suchen und kopieren

BeitragMi, Aug 23, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher kennt fast jeder das Problem, man hat eine Menge B3D-Files
und jede Menge Texturen, irgendwann kommt eine Textur zum B3D File abhanden,
entweder man hat sie ausversehen nicht mitkopiert oder beim Texturen aufräumen
hat man vergessen das man die Textur schon für ein B3D File benutzt hat oder tausend andere Gründe.
Jedenfalls hab ich meine Texturen nun nach Themen sortiert und ein kleines Programm
geschrieben um mir die passenden Texturen aus den Verzeichnissen zum B3D File zu kopieren.

Anleitung zur Benutzung:

Man schreibt alle Pfade in denen sich Texturen befinden untereinander
in eine Textdatei und nennt sie SD.txt, diese muss sich im selben Verzeichnis befinden
wie das kleine Programm unten im Codefenster. Ich nenne es CopyTEX4B3D.

Dann verschiebt oder kopiert man CopyTEX4B3D plus SD.txt
in ein Verzeichnis in dem sich B3D-Files befinden bei denen Texturen fehlen welche sich in einem
der gelisteten Verzeichnisse befinden müssten.

CopyTEX4B3D starten und die gesuchten Texturen befinden sich im selben Ordner wie das B3D-File.

Die Texturen werden nicht verschoben, sie werden nur kopiert.

Code: [AUSKLAPPEN]



Dim Tex$(100)
Dim searchdir$(100)   
Dim B3Dfile$(1000)

; ------------------------------------------------------------------------------------------------------------   
; Lade Textfile "SD.txt" in dem pro Zeile ein Pfad angegeben ist in dem nach der Textur gesucht werden soll.
; Pfad mit \ abschliessen
; ------------------------------------------------------------------------------------------------------------

If FileType("SD.txt") <> 1 
    Print "Kein SD.txt File"
EndIf
sdir = ReadFile("SD.txt") 
    sdz = 0
   While Not Eof(sdir)
       searchdir$(sdz) = ReadLine$(sdir)
       searchdir$(sdz) = Trim$(searchdir$(sdz))
       If searchdir$(sdz) <> ""
           sdz = sdz + 1
           If Right$( searchdir$(sdz),1) <> "\" Then searchdir$(sdz) = searchdir$(sdz) + "\"   
       EndIf
      
   Wend   
CloseFile sdir   

; ------------------------------------------------------------------------------------------------------------ 
; Alle .B3D Dateien im aktuellen Pfad einlesen um später die Texturen in "SD.txt" angegebenen Pfaden zu suchen
; ------------------------------------------------------------------------------------------------------------


Pfad$=CurrentDir$ ()                                                                                     
Verz=ReadDir(Pfad$) 
bz = 0
Repeat
    Datei$=NextFile$(Verz)
    If Datei$="" Then Exit
    If FileType(Pfad$+Datei$) = 1
        If Instr(Upper$(Datei$),".B3D")   
            B3Dfile$(bz) = Pfad$+Datei$
            bz = bz + 1
        EndIf
    End If
Forever 
bz = bz - 1
CloseDir Verz


; ------------------------------------------------------------------------------------------------------------   
; Lese Texturfiles aus den .B3D Dateien im aktuellen Pfad
; ------------------------------------------------------------------------------------------------------------

For allfiles = 0 To bz

   infile = ReadFile(B3Dfile$(allfiles))
   
   out = 0
   Repeat
   
   chunk$ = Read4Char$(infile)
   
   
      If chunk$  = "TEXS"
   
            TEXSchunk$ = chunk$
            TEXSchunksize = ReadInt( infile )
            fp = FilePos( infile ) 
            tz = 0
            Repeat
   
               Tex$(tz) = ReadNullString$(infile) 
               qi = ReadInt( infile )
               qi = ReadInt( infile )
               qf# = ReadFloat( infile )
               qf# = ReadFloat( infile )
               qf# = ReadFloat( infile )
               qf# = ReadFloat( infile )
               qf# = ReadFloat( infile )
                   If FilePos( infile ) > fp+TEXSchunksize
                   RuntimeError "ERROR in TEXS chunk"
                   Exit
                EndIf
               tz = tz + 1
            Until FilePos( infile ) >= fp+TEXSchunksize 
            tz = tz - 1   
            out = 1
       EndIf     
      
   Until out = 1
   
   CloseFile infile   

; ------------------------------------------------------------------------------------------------------------   
; Suche Texturfiles und kopiere sie ins aktuelle Verzeichnis
; ------------------------------------------------------------------------------------------------------------
   
   For allTEX = 0 To tz   
        If FileType (Tex$(allTEX)) = 1 
            Exit 
        EndIf
        For allPfad = 0 To sdz   
            If FileType (searchdir$(allPfad)+Tex$(allTEX)) = 1 
                CopyFile (searchdir$(allPfad)+Tex$(allTEX)), Pfad$+Tex$(allTEX)
                Exit   
            EndIf
        Next   
   Next

Next   

End

;#Region Funktionen
 

Function Read4Char$(b3dfile)
   For i = 1 To 4
      s$ = s$+Chr$(ReadByte( b3dfile ))
   Next
   Return s$
End Function   

Function ReadNullString$(b3dfile)
   Repeat
      b = ReadByte( b3dfile )
      If b = 0 Return s$
      s$ = s$+Chr$(b)
   Forever
End Function




;#End Region

antome

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group