FileDevider

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Aldi

Betreff: FileDevider

BeitragSo, März 12, 2006 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier, kumma:
Code: [AUSKLAPPEN]

;Filedevider
Graphics 640,480,16,2

.start
FlushKeys
Print "[1] - Datei teilen"
Print "[2] - Datei wiederherstellen"
Print "[Esc] - Ende"

Repeat
 If KeyHit(2)= 1 Then Goto devide_begin
 If KeyHit(3)= 1 Then Goto restore_begin
 If KeyHit(1)= 1 Then End
Forever

.devide_begin

FlushKeys

filename$= Input$("Ziel: ")
origfile= OpenFile(filename)
If origfile= 0 Or FileType(origfile)= 2 Then
 Print "Datei existiert nicht oder konnte nicht geladen werden!"
 Goto devide_begin
EndIf

.sizechose

Print "Größe: " + FileSize(filename) + " byte."
newfilesize= Input("Gewünschte Teildateigröße in byte: ")
If newfilesize => FileSize(filename) Then Print "Übersteigt aktuelle Dateigröße!" : Goto sizechose
parts= Int(Ceil(Float(FileSize(filename))/newfilesize))
Print "Datei wird in " + parts + " Teile geteilt."
Print "Zum Fortfahren Taste drücken..."
WaitKey
Print "Teile Datei..."



Dim files(parts)

For I= 1 To parts
 files(I)= WriteFile(filename + I)
 For J= 0 To newfilesize - 1
  If Eof(origfile)= 1 Then Exit
  byte= ReadByte(origfile)
  WriteByte files(I),byte
 Next
 CloseFile files(I)
Next

CloseFile origfile

Print "Datei in " + parts + " Teile aufgeteilt."

WaitKey

Goto start

.restore_begin

FlushKeys

name_firstpart$=Input$("Position erste Teildatei: ")
If FileType(name_firstpart)= 0 Then Print "Datei existiert nicht!" : Goto restore_begin
parts= Input("Anzahl Dateiteile: ")
Dim files(parts)
origfile= WriteFile(Left(name_firstpart,(Len(name_firstpart)-1)))
partsize= FileSize(name_firstpart)
Print "Teildateigröße: " + partsize + " byte."
Print "Stelle Originaldatei wieder her..."

For I= 1 To parts
 files(I)= ReadFile(Left(name_firstpart,(Len(name_firstpart)-1))+I)
 For J= 1 To partsize
  If Eof(files(I))= 1 Then Exit
  byte= ReadByte(files(I))
  WriteByte origfile,byte
 Next
 CloseFile files(I)
Next

CloseFile origfile
Print "Originaldatei wiederhergestellt."

WaitKey

Goto start

 

naibaf7

BeitragMo, März 13, 2006 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was soll das bringen ?? Files zersplittern Rolling Eyes
My Pc:
MSI 790FX-GD70, Phenom X4 955BE, 2x2GB DDR3-1600, 8800GTS-512, WD 640GB + Samsung 160GB, Scythe Kaze Master
 

Florian

BeitragMo, März 13, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
- Programmbeschreibung fehlt
- Quelltext enthält viele gotos
- Es wäre schon, wenn der Quelltext zwei Funktionen zum zerteilen von Dateien und zum wiederherstellen von Dateien enthält.
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0
 

Aldi

BeitragDi, März 14, 2006 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Beschreibung:
Mit diesem Prog kann man Dateien... teilen Smile und äh... also wenn mal eine ziemlich große Datei auf eine Diskette, die heute sowieso niemand mehr braucht, oder einen Stick soll, dann kann man sie in kleinen handlichen Stücken transportieren *gg*
die Gotos: Ich finde, es sind so wenige, dass man die Übersicht nicht verliert...
Und die Funktionen: Gute Idee, aber.. naja... Smile
 

naibaf7

BeitragDi, März 14, 2006 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube zwar nicht das das soo gut is Wink

Aber vieleicht könnte man da noch einen kleinen Optimierungsversuch Sarten:

Der erste Teil der Datei zum beispiel Sollte eine EXE sein, die wenn man sie anklickt den Zweiten Teil sucht und dann zusammenfügt!! Und noch n passwort in die exe Packen damit sie nicht jeder zusammenfügen kann.

So hättest du n Top programm Very Happy Smile
My Pc:
MSI 790FX-GD70, Phenom X4 955BE, 2x2GB DDR3-1600, 8800GTS-512, WD 640GB + Samsung 160GB, Scythe Kaze Master

Hip Teen

BeitragDi, März 14, 2006 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab da mal was gebastelt, mit Funktionen und so Wink Features kann man noch erweitern, wenn man lustig ist Rolling Eyes Code ist für mich selbsterklärend, für euch hoffentlich auch, wie man die Funktionen benutzt hab ich kurz beschrieben. Brauch sowas sowieso für mein aktuelles Projekt, danke Aldi dass du mich dazu gebracht hast das mal sauber (jedenfalls, nach außen, innerhalb der Funktion sieht es teilweise wüst aus ^^) zu coden Very Happy kann man auf jedenfalls gut wiederverwenden Smile

Code: [AUSKLAPPEN]
; Anregung durch Aldi
; brauchs aber sowieso im aktuellen Projekt...
; bla blub, Beschreibung braucht ihr hoffentlich net :P

; Verwendung:
; splitFiles:
;    gebt den Pfad+Dateinamen des Files an, das ihr splitten wollt
;   dann noch die Größe der Parts
;   und falls die Files woanders hinsollen, geb den neuen Pfad an
;
; recoverSplitFiles:
;    geb den Pfad an, in dem die splitts drinnen sind
;    dann noch den alten Dateinamen
;    optional: neuer Pfad
;   optional: neuer Dateiname
;
;    deletePartFiles:
;      gebt das Verzeichnis an, in dem die PartFiles sind, gefolgt von dem original Dateinamen

zeit = MilliSecs()
splitFiles ("D:\blub.rar",1024*1024, "E:\")
;DeleteFile "D:\baer.rar"
recoverSplitFiles("E:\", "blub.rar", "D:\","baer.rar")
DeletePartFiles("E:\blub.rar")

Notify (float(MilliSecs()) - Float (zeit) ) / 1000.0 + " Sekunden hat es gedauert"


Function splitFiles( oldFileWithPath$, splitFileSize, pathToSplitFiles$ = "")
   Local bank, inputFileStream, sizeOfFile, numberParts, oldFileName$
   Local bankPos
   oldFileName$ = LastPath ( oldFileWithPath$ )
   inputFileStream = ReadFile( oldFileWithPath$)
   sizeOfFile = FileSize ( oldFileWithPath$)
   bank = CreateBank( sizeOfFile )
   ReadBytes(bank, InputFileStream, 0,sizeOfFile)
   numberParts = Ceil (Float(sizeOfFile)/Float(splitFileSize))
   count = numberParts
   bankPos = sizeOfFile
   Repeat
      count = count - 1
      If pathToSplitFiles$ = ""
         outputFileStream = WriteFile (oldFileWithPath$ + counting$(count))
      Else
         outputFileStream = WriteFile ( pathToSplitFiles+ oldFileName$ + counting$(count))
      End If
      bankPos = bankPos - splitFileSize
      If bankPos < 0 Then
         WriteBytes (bank, outputFileStream, 0, splitFileSize+ bankPos)
      Else
         WriteBytes (bank, OutputFileStream, bankPos, splitFileSize)
      End If
      CloseFile outputFileStream
   Until count = 0
   CloseFile inputFileStream
End Function



Function recoverSplitFiles( pathToSplitFiles$, oldFileName$, pathToNewFile$ = "", newFileName$ = "" )
   Local bank, outputFileStream, oldFileSize, bankPos, partFileSize
   
   If newFileName$ = "" Then newFileName$ = oldFileName$
   If pathToNewFile$ = "" Then pathToNewFile$ = pathToSplitFiles$

   outputFileStream = WriteFile ( pathTonewFile$ + newFileName$)
   oldFileSize = countingOldFileSize ( pathToSplitFiles$ + oldFileName$)
   bank = CreateBank( oldFileSize )
   While FileType( pathToSplitFiles$  + oldFileName$ + counting$(count)) = 1
      inputFileStream = ReadFile( pathToSplitFiles$  + oldFileName$ + counting$(count) )
      partFileSize = FileSize( pathToSplitFiles$  + oldFileName$ + counting$(count))
      ReadBytes  (bank, inputFileStream, bankPos, partFileSize)
      bankPos = bankPos + FileSize ( pathToSplitFiles + oldFileName$ + counting$(count))
      CloseFile inputFileStream
      count = count + 1
   Wend
   WriteBytes ( bank, outputFileStream, 0, oldFileSize)
   CloseFile outputFilestream
End Function



Function countingOldFileSize(originalFilePath$)
   Local oldFileSize
   While FileType(OriginalFilePath$+counting$(count)) = 1
      oldFileSize = oldFileSize + FileSize(OriginalFilePath$+counting$(count))
      count = count + 1
   Wend
   Return oldFileSize
End Function



Function DeletePartFiles(originalFilePath$)
   Local oldFileSize
   While FileType(OriginalFilePath$+counting$(count)) = 1
      DeleteFile ( OriginalFilePath$+counting$(count) )
      count = count + 1
   Wend
End Function



Function counting$(numberString$)
   While Len( numberString$) < 3
      numberString$ = "0" + numberString$
   Wend
   Return numberString$
End Function

Function LastPath$(dirpath$)
   Local position, dirname$
   position = RInstr(dirpath$,"\",1)
   If position = 0 Then Return
   dirname$ = Mid$(dirpath$,position + 1,-1)
   Return dirname$
End Function

Function RInstr(stri$,search$,count=0)
 Local i
 If Len(search$) = 0 Then Return 0
 For i = Len(stri$)-count To 1 Step -1
  If Mid(stri$,i,Len(search$)) = search$ Then
   Return i
  EndIf
 Next
 Return 0
End Function
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

$tankY

BeitragSa, März 18, 2006 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, sowas kann ich auch für ein älteres Projekt gebrauchen, also dann... ran an's Werk und danke für den Code^^

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group