WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 24.03.2003, 20:57   #1
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard VB - das ENDE einer Datei lesen....

Ich würd von einigen Dateien immer nur das Ende der Datei brauchen (letzten 128-bit einer MP3 Datei).
Ich hab mir das ganze jetzt nur mal Testweise angeschaut, und es einfach als Textdatei geöffnet, dann alles Zeilen durchgelesen und immer wieder abgespeichert.

Und dann von der letzten Zeile einfach die letzten 128 Zeichen genommen.

Nur is das von der Performance net unbedingt gerade das was ich mir vorstelle.

Gibts da eine Möglichkeit direkt das Ende einer Datei zu lesen?

aja, und hier noch schnell mein Beispielcode, wie ich das ganze nur mal kurz ausprobiert hab:
Code:
laenge = 0

Set filesys = CreateObject("scripting.filesystemobject")

Set file = filesys.getfile("c:\test.mp3")

Set textstream = file.openastextstream(1, -2)

While Not textstream.atendofstream

    test = textstream.readline
    laenge = Len(test)

Wend

MsgBox laenge
MsgBox Right(test, 128)
renew ist offline   Mit Zitat antworten
Alt 24.03.2003, 21:08   #2
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

ajo, nochwas:

ich muss das Ding sicher als Binärdatei öffenen (bin ich grad draufgekommen)

Weil wenn ich die ID3 Tags im Notepad änder kommt a gröberer schas bei der MP3 Datei raus (soundfehler)

allerdings wenn ich das Ding im Hex-Editor aufmach und dort was änder und dann abspeicher, dann funkt des.

Ich nehm mal an, der Hex-Editor wird die von mir eingegeben Strings in Binärwerte umsetzen und dann abspeichern - während Notepad die Binärwerte der Strings als ASCII Zeichen umsetzt und wenn ich dann was ändere er direkt nur ASCII Zeichen und keine Binärwerte dafür einfügt --> schas kommt raus.

Ich hoff das stimmt so, falls ich mich da mit meiner Vermutung vertue, bitte korrigierts mich, bin bei Binärdateien noch sehr, sehr unerfahren.
renew ist offline   Mit Zitat antworten
Alt 24.03.2003, 22:17   #3
flinx
Inventar
 
Registriert seit: 08.04.2001
Beiträge: 3.101


Standard

Lösung hab ich keine, aber vielleicht hilft der Source von http://phelix.sathack.com/source/
flinx ist offline   Mit Zitat antworten
Alt 25.03.2003, 00:26   #4
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

mal ganz simpel...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
FLen = LOF(1)
T = Space$(FLen)
Get #1, , T
Close #1
ID3Tag = Right$(T, 128)
Somit hast die letzten 128 byte des files isoliert.

dann änderst die.

dann...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
Put #1,FLen-128,ID3Tag
close #1
und schon is der modifizierte tag wieder im file drin.

Alles klar?


Und zum Aufbau des tags fragst ambesten mal g00gle.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 25.03.2003, 13:24   #5
mst547
Newbie
 
Registriert seit: 25.03.2003
Beiträge: 2


Standard Notepad

Noch mal zu Notepad:
Dieses Phänomen kenne ich auch, wenn man im Notepad Binär-Dateien ändert, funktioniert das nicht mehr. Ich bin draufgekommen, dass Notepad beim Abspeichern (oder schon beim Einlesen?) alle 0-Zeichen (ASCII-Code 0), die ja in binären Dateien vorkommen, durch ein Leerzeichen ersetzt. Die binären Daten werden dadurch für das andere Programm (das die entsprechende Datei normalerweise öffnet) nicht mehr lesbar.
mst547 ist offline   Mit Zitat antworten
Alt 25.03.2003, 13:51   #6
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

Zitat:
Original geschrieben von Sesa_Mina
mal ganz simpel...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
FLen = LOF(1)
T = Space$(FLen)
Get #1, , T
Close #1
ID3Tag = Right$(T, 128)
Somit hast die letzten 128 byte des files isoliert.

dann änderst die.

dann...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
Put #1,FLen-128,ID3Tag
close #1
und schon is der modifizierte tag wieder im file drin.

Alles klar?


Und zum Aufbau des tags fragst ambesten mal g00gle.
thx - hört sich sehr gut an.

ID3 weiß ich schon wie die ausschauen, und da werd ich sicher noch was finden, falls ich noch Infos brauche.

@mst547

danke, das bestätigt das was ich mir gedacht habe.
renew ist offline   Mit Zitat antworten
Alt 08.04.2003, 18:40   #7
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

Zitat:
Original geschrieben von Sesa_Mina
mal ganz simpel...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
FLen = LOF(1)
T = Space$(FLen)
Get #1, , T
Close #1
ID3Tag = Right$(T, 128)
Somit hast die letzten 128 byte des files isoliert.

dann änderst die.

dann...

Code:
Open "mymp3.mp3" For Binary As #1 Len = 1
Put #1,FLen-128,ID3Tag
close #1
und schon is der modifizierte tag wieder im file drin.

Alles klar?


Und zum Aufbau des tags fragst ambesten mal g00gle.
heut bin ich endlich dazu gekommen, mir das ganze anzusehen...

Nur funkts leider nicht!!

Bekomm folgende Fehlermeldung:
Zitat:
Laufzeitfehler 458

Variable verwendet einen in Visual Basic nicht unterstützten Typ der Automatisierung
Der Fehler kommt genau in der Zeile vom Get #1, , T.
renew ist offline   Mit Zitat antworten
Alt 08.04.2003, 18:48   #8
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

Dann probier

Get #1,0,T

die 0 gibt hierbei die "record-position" im file an.

Mit Open .. for binary as #1 LEN=1 wird die record länge auf 1 byte gesetzt.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 08.04.2003, 19:00   #9
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

Zitat:
Original geschrieben von Sesa_Mina
Dann probier

Get #1,0,T

die 0 gibt hierbei die "record-position" im file an.

Mit Open .. for binary as #1 LEN=1 wird die record länge auf 1 byte gesetzt.
ja danke - das hab ich noch nicht versucht.

Ich hab dann heute die e-books gewälzt und mir das ganze schon raus gesucht.

Was mir aber eher als unlogisch vor kommt, wie bekommst du das ganze file, wenn du die records länge auf 1 byte setzt, und dann nur einmal mittels Get einliest? Dann bekommst doch nur 1 byte in die Variable - oder?
renew ist offline   Mit Zitat antworten
Alt 08.04.2003, 19:12   #10
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

mit

T = Space$(FLen)

schreibe ich einen leerstring in die Variable welcher der exakten Dateilänge entspricht.

Dadurch wird per Get das ganze file eingelesen.

Wenn du nur T = Space$(1000) schreiben würdest, hättest du nach dem Get befehl nur die ersten 1000 bytes in der Variable.

Danach müsstest du mit Get #1,1000,T die nächsten 1000 byte lesen und dann mit Get #1,2000,T die nächsten usw.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:30 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag