Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Schneller Dateizugriff

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 05.11.2005, 19:43    Titel: Schneller Dateizugriff Antworten mit Zitat

Hallo,

ich suche eine Möglichkeit für einen schnellen Dateizugriff, da ich vorhabe einen simplen "Eraser" zu programmieren.
Mir ist auch nicht ganz klar, welche Programmiersprache und welche Art des Zugriffs (binär usw.) dafür am besten geeignet ist.
Sollte ich besser eine Konsolenanwendung oder eine GUI erstellen?
Ist ein DOS-Programm schneller als ein Windows-Programm?

Vielen Dank im Voraus

Dominik
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.11.2005, 21:41    Titel: Antworten mit Zitat

@Dominik:
Auch für einen ganz
Zitat:
simplen "Eraser"
gilt:
-Er muß erkennen, ob eine Datei vorhanden ist
-Er muß Read/Only-, Hidden- und System-Dateien erkennen können
-Er muß Berechtigungen berücksichtigen
Das läßt sich natürlich alles unter Dos erledigen..
..da Dos jedoch unter Windows läuft(ich setze mal eine 'normale' Installation voraus..), bietet es sich aber an, die Windows-Funktionen zu benutzen,
denn bei Dos-Befehlen ist die Auswertung der Ergebnisse kompliziert!
Außerdem mußt du ja für jede Funktion ein Programm starten, auch wenn es 'nur' Command/Cmd ist..
Moderne Programmiersprachen unterstützen die Windows-Funktionen, du solltest vllt. mal was zu deinen Vorkenntnissen sagen zwinkern
Viele Grüße
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 05.11.2005, 22:33    Titel: Antworten mit Zitat

Hi,

ich dachte eigentlich mehr an ein Programm, was eine Datei mit zufälligem Inhalt erstellt, die immer größer wird bis die Festplatte voll ist, um gelöschte Dateien sicher zu löschen. Daher auch der schnelle Dateizugriff: Denn ein in TurboPascal geschriebenes Programm z.B. ist einfach zu langsam, sodass man bei einer 20 GB Festplatte schon weit über 1 Stunde braucht.
Zu den Vorkenntnissen: Im Bezug auf die WinApi nicht sehr viel, ansonsten Basic schon ganz gut.... zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 05.11.2005, 23:04    Titel: Antworten mit Zitat

Mit diesen kleinen Programm kannst du ne recht große Datei erzeugen die aber anderes nicht überschreiben wird.
Code:

Open "c:\Temp.txt" for output as #1
do
Print #1,Space$(1024)'ein 1KB String
loop while inkey$<>CHR$(27)
close #1

_________________
MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 06.11.2005, 00:14    Titel: Antworten mit Zitat

Sicher?

So wie ich das verstehe, möchte er, das bereits gelöschte dateien überschrieben werden. Die bleiben ja immer noch auf der Festplatte, bis sie überschrieben werden.

Michael

EDIT: Was mich mal interessiert : Wie kann man dateien als sytem bzw. versteckt erstellen? Geht das irgendwie mit der WinAPI oder einfacher?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 06.11.2005, 01:30    Titel: Antworten mit Zitat

@programmierer:
Ich kanns dir nur für vbscript sagen:
Einfach das Attribut-Byte einer Datei einlesen, ändern und wieder schreiben..
Zugegeben:ERSTELLEN einer Datei mit Sys- oder Hid-Bit kenne ich auch nicht, oder war das nicht das, was du meintest ?
@Kai Bareis:
Ich habe gerade mal nachgesehen..
Ein VbScript, das diese Aufgabe(ähnlich wie dein Programm-Rumpf)löst,
habe ich mal geschrieben(für meine USB-Sticks), aber in einer MsgBox steht der deutliche Hinweis:..Das kann dauern..
Das galt damals für 128MB bzw 256MB und wird bei
Zitat:
einer 20 GB Festplatte
sicherlich nicht verkehrt sein..
Ich denke, die Idee von Dominik ist dieselbe, wie meine damals:
Den unbenutzten Rest einer Platte einfach zumüllen und danach dann löschen und neu beschreiben..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 06.11.2005, 12:40    Titel: Antworten mit Zitat

ytwinky hat Folgendes geschrieben:
@programmierer:
Ich kanns dir nur für vbscript sagen:
Einfach das Attribut-Byte einer Datei einlesen, ändern und wieder schreiben..
Zugegeben:ERSTELLEN einer Datei mit Sys- oder Hid-Bit kenne ich auch nicht, oder war das nicht das, was du meintest ?


Das nachträgliche ändern ist ja fast das selbe, oder? Kannst du mir bitte mal den Script geben?? Habe mal in der WinAPI nachgeguckt aber nichts hilfreiches gefunden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 06.11.2005, 13:30    Titel: Antworten mit Zitat

ytwinky hat Folgendes geschrieben:

@Kai Bareis:
Ich habe gerade mal nachgesehen..
Ein VbScript, das diese Aufgabe(ähnlich wie dein Programm-Rumpf)löst,
habe ich mal geschrieben(für meine USB-Sticks), aber in einer MsgBox steht der deutliche Hinweis:..Das kann dauern..
Das galt damals für 128MB bzw 256MB und wird bei
Zitat:
einer 20 GB Festplatte
sicherlich nicht verkehrt sein..

Sagen wir mal die Festplatte kommt auf ca. 20 MB/s durchschnittliche Schreibgeschwindigkeit, dann brauchste für ne kleine 20GB Platte 1000 Sekunden, was etwas mehr als 'ne virtel Stunde ist. Da heutzutage die Platten aber eher zehn mal so groß sind kannste dir Denken, wie lange das dauert.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 06.11.2005, 18:22    Titel: Antworten mit Zitat

@helium:
Deine Rechenaufgabe habe ich ohne Taschenrechner geschafft zwinkern
Es ging hier in meinen Augen erstmal um das 'WIE', ob das Ganze dann noch optimiert werden kann, ist eine andere Sache..
..es soll auch Tools geben, die das können, manche beschreiben die Platte sogar mehrfach mit dem SELBEN Wert, aber ich glaube, das ist bereits bekannt.. zwinkern
@programmierer:
Das Skript hatte ich mal für meine Zwecke geschrieben, kann sein, daß du es so nicht gebrauchen kannst. Die relevanten Sachen sind aber in Funktionen gepackt, sodaß du also nur die Sachen nehmen kannst, die du brauchst zwinkern
Code:
'<VBScript>
' File:  Attrib.Vbs
' Autor: Jörg Zühlke
' Zweck: Listet die aktuellen Attribute einer Datei auf
' Wer dies Skript benutzt, ist selbst verantwortlich für die Auswirkungen..
'..der Autor jedenfalls nicht
Const Normal=0, ReadOnly=1, Hidden=2, System=4, Volume=8, Directory=16, Archiv=32, Alias=64, Compressed=128
Const EMSDos="Attrib.Vbs"

Dim WshShell, Fso, d
Set Fso=CreateObject("Scripting.FileSystemObject")
FileName=InputBox("Datei-Name eingeben:", "SysAdmin", EMSDos)
If Len(FileName)=0 Then WScript.Quit
MsgBox Stat(FileName)
SetAttribute FileName, System
WScript.Quit

Function ResetAttribute(DateiAngabe,Attribut)
   Dim Datei
   Set Datei=Fso.GetFile(DateiAngabe)
   If Datei.Attributes And Attribut Then Datei.Attributes=Datei.Attributes-Attribut
End Function

Function SetAttribute(DateiAngabe, Attribut)
   Dim Datei
   Set Datei=Fso.GetFile(DateiAngabe)
   If Datei.Attributes And Not Attribut Then Datei.Attributes=Datei.Attributes+Attribut
End Function

Function Stat(DateiAngabe)
   Dim Datei, A, B
   A=Array("Normal", "NurLesen", "Versteckt", "System", "Label", "Verzeichnis", "Archiv", "Alias", "Gepackt")
   B=Array("", "Lesen&Schreiben", "Sichtbar", "User", "", "Verzeichnis", "Archiv", "Alias", "Gepackt")
   Set Datei=Fso.GetFile(DateiAngabe)
   Attrib=1
   Stat="Datei:" &DateiAngabe &vbCr &"Attribute=" &Datei.Attributes &" " &VarType(Datei.Attributes) &vbCr &Bin(Datei.Attributes) &vbCr
   For i=0 To 8
      If Datei.Attributes And 2^i Then Stat=Stat &" " &A(i) &vbCr Else Stat=Stat &" " &B(i) &vbCr
   Next
End Function

Function Bin(b)
   Dim MaxBin, i, h
   MaxBin=(2^16)-1
   If b>MaxBin Then
      MsgBox Msg &"Das geht nicht, Script überarbeiten.." &vbCr &"aktueller Wert=" &b &vbCr &"Max(erlaubt)=" &MaxBin
      WScript.Quit
   End If
   For i=Int(Log(b)/Log(2)) To 0 Step -1
      h=h &Array("1", "0")(Abs((2^i And b)=0))
   Next
   If Len(h)<16 Then h=String(16-Len(h), "0") &h
   Bin=h
End Function
'</VBScript>

Habe gerade nochmal eine Zeile eingefügt:
Das Skript hat nach Ablauf das Attribut System(sofern die Berechtigungen das zulassen, aber das ist deine Sache..)
<Edit>
Hat sich das Script erfolgreich das System-Attribut verpaßt und du möchtest das wieder rückgängig machen, läßt du es einfach nochmal laufen..
</Edit>
Happy attributing
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 06.11.2005, 18:57    Titel: Antworten mit Zitat

@Kai Bareis
Zitat:
Mit diesen kleinen Programm kannst du ne recht große Datei erzeugen die aber anderes nicht überschreiben wird.
Code:

Open "c:\Temp.txt" for output as #1
do
Print #1,Space$(1024)'ein 1KB String
loop while inkey$<>CHR$(27)
close #1


Ist das die schnellste Möglichkeit?
Vor allem ist FB dafür das "richtige"- da es dabei ja auf kleinste Geschwindigkeitsunterschiede ankommt - oder sollte man es besser in C++ schreiben?
Noch eine Frage: Ist ein Konsolenprogramm oder eine Gui besser geeignet?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 06.11.2005, 19:23    Titel: Antworten mit Zitat

C++ ist nicht schneller oder langsamer als FreeBasic Programme, da C++ nur eine Sprache ist. Für C++ gibt es verschiedene Compiler, deren erzeugte EXE-Dateien mitunter verschieden schnell laufen. lächeln FB ist jedoch schon rasant schnell. Du kannst aber auch einfach ausprobieren, wie schnell die Dateizugriffe bei den verschiedenen Compilern sind.

Die Zugriffsmodi kannst du bei FB so testen:
Code:
a!=TIMER
OPEN "lalala.txt" FOR OUTPUT AS #1
spam$=SPACE$(1024)
FOR i&=1 TO 10000
PRINT #1, spam$
NEXT i&
CLOSE #1
b!=TIMER
PRINT "Methode 1 dauerte "; LTRIM$(STR$(b!-a!)); " Sek."
KILL "lalala.txt"
a!=TIMER
OPEN "lalala.txt" FOR BINARY ACCESS WRITE AS #1
spam$=SPACE$(1024)+CHR$(13)+CHR$(10)
FOR i&=1 TO 10000
PUT #1,, spam$
NEXT i&
CLOSE #1
b!=TIMER
KILL "lalala.txt"
PRINT "Methode 2 dauerte "; LTRIM$(STR$(b!-a!)); " Sek."
SLEEP: END

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 06.11.2005, 20:10    Titel: Antworten mit Zitat

Danke ytwinky.

Ich gucke mir das mal an und versuche das nach Freebasic zu übersetzen.

@Sebastian:

Die 2. MEthode ist ja ca. 8 mal schneller. Hätte ich nicht gedacht. Wenn man aber +CHR$(13)+CHR$(10) weglässt, dann ist das nur noch doppelt so schnell. Wieso?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 06.11.2005, 20:17    Titel: Antworten mit Zitat

Der QB-Kompatibilität wegen. Man kann nämlich WIDTH #fileno,out_width auch auf Dateien anwenden. Also muss man pro geöffneter Datei einen "virtuellen Cursor" verwalten, dessen neue X-Position sich aus dem letzten CR/LF + Anzahl folgender Zeichen errechnet.

Ziemlich ärgerlich das alles, aber leider nicht anders zu lösen.

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 07.11.2005, 17:06    Titel: Antworten mit Zitat

Hmm..

Ich glaube, dass der Code von dir nicht nach Freebasic übersetzbar ist. Da muss ich wohl die WINAPI nehmen. Trotzdem Danke!

Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 07.11.2005, 18:21    Titel: Antworten mit Zitat

1.Das glaube ich auch zwinkern
2.Keine Ursache
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 07.11.2005, 21:06    Titel: Antworten mit Zitat

Hi programmierer,
versuch mal folgendenden Link:
http://www.activevb.de/rubriken/apikatalog/deklarationen/findfirstfile.html
Ich denke, der löst deine Probleme..
Again, happy attributing zwinkern
ytwinky
<Edit>
Aber beachte:
Zitat:

Unterstützte Betriebssysteme
Win32s, Windows 95, Windows 98, Windows NT

hatte ich übersehen geschockt
</Edit>
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.11.2005, 13:15    Titel: Antworten mit Zitat

Das funktioniert unter 2000/XP bestimmt auch. Was auf NT läuft, läuft nämlich mit hoher Wahrscheinlichkeit auch auf 2k/XP.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 08.11.2005, 15:04    Titel: Antworten mit Zitat

@Sebastian:
Ich wollt's doch nur gesagt haben..
..aber wennste meinst, dann brauch ich nicht mehr weiterzusuchen!
1.Kann ich probieren, wie das mit dem API-Aufruf läuft
2.Bekomme ich mglw. ein Programm, das das gleiche kann, wie das Vbscript, nur in einer richtigen Programmiersprache..
(Aber das Script ist 2 Jahre alt, es eilt also nicht und hat lediglich den Zweck, Programiertechniken zu üben)
Trotzdem Dank für den mutmachenden Schulterklopfer
und viele Grüße
ytwinky

<Edit>
08.11.2005
3. Also FindFirstFile funktioniert schon mal, das bedeutet für mich:
Ich kann eine Datei auf Existenz prüfen, ohne sie zu Öffnen!
(War mal irgendwo ein Thema, ich weiß aber nicht mehr wo..)
Jedenfalls konnte ich das unter BP7.0 und jetzt auch per API
</Edit>
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz