Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Windows-Scriptsprache mit Binärdatei-Funktionalität ?

Frage Entwicklung

Mitglied: StefanSch

StefanSch (Level 1) - Jetzt verbinden

15.10.2010 um 20:27 Uhr, 5244 Aufrufe, 16 Kommentare

Script Host mit VB- oder JScript steht ja zur Verfügung, aber ...

... kein Datei-Zeiger, kein Lesen oder Schreiben von Teilsequenzen.
Schade drum, JavaScript als hinreichend prägnante Sprache und das vorinstalliert auf allen aktuellen Versionen wäre schon 'ne schöne Sache gewesen.

Muss wohl für 'ne wirklich professionelle Lösung ein Drittanbieter her. Irgendwelche Erfahrungen, insbesondere mit den Implementierungen von Perl ( ActivePerl ) oder Php ?
Mitglied: Biber
15.10.2010 um 20:38 Uhr
Moin StefanSch,

willkommen im Forum.
Natürlich geht es mich überhaupt nichts an, aber....

Magst du nicht wenigstens andeuten, für welches Vorhaben du ein geeignetes Werkzeug brauchst?

Ich meine, wenn ich in einem Baumarkt an der Information frage "Was haben Sie denn so für Werkzeug sofort zum Mitnehmen?"

... das Gespräch kann dann entweder sehr sehr kurz oder sehr sehr lang werden..

Ich kann dich heute leider nicht direkt in den Papierkorb geleiten, weil ein SpamBot gerade den Einlass dauerblockiert, sorry...

Aber wenn du es innerhalb der nächsten 2 Stunden nicht schaffst, die Frage auf "zielführend beantwortbar" umzuformulieren, dann finde ich ein Hintertürchen.

Grüße
Biber
Bitte warten ..
Mitglied: maretz
15.10.2010 um 20:48 Uhr
und um dir mal ne kleine hilfe zu geben:

Perl / PHP sind idR nicht bei Windows dabei...

Warum nicht Java? Ne JRE hast du oftmals schon dabei....

Aber es wäre natürlich hilfreich zu wissen was du möchtest... Und nen kleiner Tipp: VOR deinem nächsten Posting les es bitte nochmal durch! Denn ich verstehe nicht wirklich was du möchtest... Und ich hoffe du schaffst das innerhalb der 2h-Einlass-Sperre von unserem Freund mit den scharfen Zähnen...
Bitte warten ..
Mitglied: dog
15.10.2010 um 21:40 Uhr
JavaScript als hinreichend prägnante Sprache und das vorinstalliert auf allen aktuellen Versionen wäre schon 'ne schöne Sache gewesen.

JavaScript ist vorinstalliert als OS-Scriptsprache.
Das heißt dort nur JScript.

Und mal ehrlich: Mit VBS oder PowerShell hast du Zugriff auf nahezu alle wichtigen Klassen und das betrifft auch Dateien.
Bitte warten ..
Mitglied: StefanSch
15.10.2010 um 22:01 Uhr
Hmmm, OK. Ich versuch's nochmal : Suche für die Windows-Plattform eine Scriptsprache, die die üblichen Funktionen zur Handhabung von Binärdateien unterstützt. Also Datei-Zeiger positionieren, Datensequenzen an beliebiger Stelle auslesen und überschreiben. So wie man das von C eben kennt und das beispielsweise Plattform-übergreifend in Php eingebunden ist. Aber interpretiert, nicht kompiliert.
Und noch besser wäre, wenn auch andere grundlegende C-Funktionalitäten ( z.B. Sockets ) implementiert sind. Ich möchte einfach nicht anfangen, eine Skriptsprache auf Kundenrechner zu installieren und mich damit auseinandersetzen, um dann bei der nächsten Problemstellung zu sehen, dass die Implementierung grundsätzliche Lücken aufweist.

Aber ich denke, Java ist da genau die richtige Idee.

Zum konkreten Anwendungsproblem schreib ich vielleicht noch, da muss ich etwas ausholen.
Bitte warten ..
Mitglied: StefanSch
15.10.2010 um 22:13 Uhr
Dass JavaScript unter Windows als vorinstallierte Skriptsprache eingesetzt wird, fand' ich auch 'ne richtig gute Sache. Die Sprache kann gleichzeitig in einem ganz anderen Bereich ( Webb-Anwendungen ) eingesetzt werden, bietet Objekt-Orientierung und Eleganz.

Hab' aber lang recherchiert, ob nicht irgendwie kleine Datensequenzen in großen Dateien ausgelesen und überschrieben werden können ( AODB oder mit Tricks über FileSystemObject ) - leider aber keine Chance. Vielleicht hab' ich da aber auch was übersehen ...
Bitte warten ..
Mitglied: StefanSch
16.10.2010 um 01:23 Uhr
Konkret hab' ich auf der einen Seite einen Rechner, auf dem regelmäßig inkrementelle Sicherungen durchgeführt werden. Die inkrementellen Sicherungen werden dann über eine relativ langsame Verbindung auf einen Server übertragen.
Ich kann nun in größeren Abständen mit dem Archivierungsprogramm die fortlaufenden Sicherungen zusammenfassen. Das macht den Sicherungsvorgang wieder deutlich schneller und reduziert die Archiv-Größe soweit, dass der vorhandene Speicherplatz auf Jahre reichen dürfte. Das neue Basis-Archiv jetzt auf den Server zu übertragen, ist allerdings keine Option - das würde über's Netz Wochen brauchen oder erfordern, dass ich immer wieder für Stunden vor Ort erscheine.

Auf dem Server kann ich aber die gleiche Zusammenfassung durchführen und als Basis für die neu erstellten inkrementellen Sicherungen einsetzen - wenn ich die wenige Byte großen Kopf- und Fußbereiche der Klienten-Datei auf die knapp 100GB große Server-Datei übertrage.

Jetzt brauche ich für Windows eine interpretierte Programmiersprache, die die dazu notwendigen 5 Zeilen Quelltext umsetzen kann. Und nach Möglichkeit auch bei Dingen wie dem Starten von Programmen, der Entgegennahme von Ausgaben, der Einbindung der GUI und der Verwendung der Socket-Schnittstelle nicht den Löffel abgibt.

So gut in manchen Dingen die Microsoft-eigene JScript Implementierung ist, bei Binärdaten scheint sie komplett zu versagen. Mit Java dürfte ich dahingegen durchweg auf der sicheren Seite sein. Und wie Du erwähnt hast, die Laufzeitumgebung ist häufig schon vorhanden.
Perl müsste prinzipiell auch den Funktionsumfang haben. Wie gut die - auf jeden Fall erst zu installierende - Implementierung unter Windows ( ggf. als ActivePerl in Windows Script Host eingebunden ) ist, kann ich aber kaum abschätzen.
Bitte warten ..
Mitglied: 76109
16.10.2010 um 12:50 Uhr
Hallo StefanSch!

Hier mal ein VBS-Beispiel, wie man per FileSystemObject und ADODB.Stream auch binäre Dateien bearbeiten kann.

Schritt 1: Eine 256-Byte große Test.Bin-Datei erzeugen mit den Werten von 00h - FFh
Schritt 2: Eine 16-Byte große Kopf.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen A-P
Schritt 3: Eine 16-Byte große Fuss.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen a-p
Schritt 4: Binary-Kopf.Bin-Datei in Byte-Array einlesen
Schritt 5: Binary-Test.Bin-Datei ab Position SkipBeg bis SkipEnd in Byte-Array einlesen
Schritt 6: Binary-Fuss.Bin-Datei in Byte-Array einlesen
Schritt 7: Byte-Arrays Ausgabe.Bin-Datei schreiben

01.
Const TestFile = "E:\Test\Test.Bin" 
02.
Const KopfFile = "E:\Test\Kopf.Bin" 
03.
Const FussFile = "E:\Test\Fuss.Bin" 
04.
Const BinFile = "E:\Test\Ausgabe.Bin" 
05.
 
06.
Const SkipKopf = 16 
07.
Const SkipFuss = 16 
08.
 
09.
Const adTypeBinary = 1 
10.
Const adSaveCreateOverWrite = 2 
11.
 
12.
Dim Fso, File, BinStream, TextStream, BinArray, KopfArray, FussArray, i 
13.
     
14.
Set Fso = CreateObject("Scripting.FileSystemObject") 
15.
 
16.
'Schritt 1 (Test.Bin erstellen) 
17.
For i = 0 To &HFF&  'Ergibt Bin 00h - FFh (256-Byte) 
18.
    TextStream = TextStream & Chr(i) 
19.
Next 
20.
     
21.
Set File = Fso.CreateTextFile(TestFile) 
22.
 
23.
File.Write TextStream:  File.Close 
24.
     
25.
'Schritt 2 (Kopf.Bin erstellen 16-Byte) 
26.
TextStream = "" 
27.
 
28.
For i = 0 To SkipKopf - 1  'Ergibt Bin 41h(A), 42h(B), 43h(C)...50h(P) 
29.
    TextStream = TextStream & Chr(i + Asc("A")) 
30.
Next 
31.
 
32.
Set File = Fso.CreateTextFile(KopfFile) 
33.
 
34.
File.Write TextStream:  File.Close 
35.
 
36.
'Schritt 3 (Fuss.Bin erstellen 16-Byte) 
37.
TextStream = "" 
38.
For i = 0 To SkipFuss - 1  'Ergibt Bin 61h(a), 62h(b), 63h(c)...70h(p) 
39.
    TextStream = TextStream & Chr(i + Asc("a")) 
40.
Next 
41.
 
42.
Set File = Fso.CreateTextFile(FussFile) 
43.
 
44.
File.Write TextStream:  File.Close 
45.
     
46.
Set BinStream = CreateObject("ADODB.Stream") 
47.
     
48.
With BinStream 
49.
    'Schritt 4 (Kopf.Bin einlesen) 
50.
    .Type = adTypeBinary 
51.
    .Open 
52.
    .LoadFromFile KopfFile 
53.
     KopfArray = .Read 
54.
    .Close 
55.
    
56.
    'Schritt 5 (Test.Bin einlesen 224-Byte) 
57.
    .Open 
58.
    .LoadFromFile TestFile 
59.
    .Position = SkipKopf 
60.
     BinArray = .Read(.Size - SkipKopf - SkipFuss) 
61.
    .Close 
62.
    
63.
    'Schritt 6 (Fuss.Bin einlesen) 
64.
    .Open 
65.
    .LoadFromFile FussFile 
66.
     FussArray = .Read 
67.
    .Close 
68.
     
69.
    'Schritt 7 (Ausgabe.Bin schreiben) 
70.
    .Open 
71.
    .Write KopfArray 
72.
    .Write BinArray 
73.
    .Write FussArray 
74.
    .SaveToFile BinFile, adSaveCreateOverWrite 
75.
    .Close 
76.
End With
Gruß Dieter
Bitte warten ..
Mitglied: StefanSch
16.10.2010 um 13:29 Uhr
Danke für Deine Antwort. Mein Problem dabei : 'BinArray' ist knapp 100 GB groß. Das schafft kein Arbeitsspeicher
Ich brauche also definitiv einen Datei-Zeiger bzw. eine Positionsangabe für Lese- bzw. Schreibvorgänge.

Ganz abgesehen davon erspart uns das ja auch jede Menge Schreibarbeit. Mit Rexx ( auf Os/2, stammt noch aus der Betriebssystem-Steinzeit, war aber von Anfang an eine vollwertige Skriptsprache ) sieht die Lösung der Aufgabe beispielsweise so aus :

01.
   iFnS = '\\klient\pfad\in.tib' ; oFnS = '\\server\pfad\out.tib' ; 
02.
   hzI = 36 ; fzI = 32 ; /*## Groesze Kopf- und Fuszbereich ##*/ 
03.
   rS = Stream( iFnS, 'c', 'open read' ) ; rS = Stream( oFnS, 'c', 'open write' ) ; 
04.
   fpI = Stream( iFnS, 'c', 'query size' ) + 1 - fzI ;   /*## Position Fusz ##*/ 
05.
   rS = CharOut( oFnS, CharIn( iFnS, 1, hzI ), 1 ) ;    /*## Transfer Kopf ##*/ 
06.
   rS = CharOut( oFnS, CharIn( iFnS, fpI, fzI ), fpI ) ;    /*## Transfer Fusz ##*/ 
07.
   rS = Stream( iFnS, 'c', 'close' ) ; rS = Stream( oFnS, 'c', 'close' ) ;
Bitte warten ..
Mitglied: 76109
16.10.2010 um 13:37 Uhr
Hallo StefanSch!

Das war auch nur als generelles Beispiel gedacht. Und mal davon abgesehen, dass kein Arbeitsspeicher 100 GB schafft, ist auch der Dateizeiger auf Long begrenzt.

Gruß Dieter
Bitte warten ..
Mitglied: StefanSch
16.10.2010 um 13:46 Uhr
Wie ? Aber bitte doch nicht auf einem Betriebssystem das Dateien > 2GB unterstützt ? Das muss doch als longlong implementiert sein !
Bitte warten ..
Mitglied: 76109
16.10.2010 um 14:27 Uhr
Hallo StefanSch!

Ok, wenn Du Recht hast und es ein LongLong-Zeiger ist, kannst Du mit ADODB trotzdem keine so großen Dateien einlesen.

Gruß Dieter
Bitte warten ..
Mitglied: StefanSch
16.10.2010 um 15:08 Uhr
Hmmm. Wenn ich die Dokumentation von 'ADODB.Stream' aber richtig verstanden habe, lädt die Methode
'.LoadFromFile' beim Aufruf die gesamte Datei in den Arbeitsspeicher ( siehe z.B.
http://msdn.microsoft.com/en-us/library/m ... ). Kann mich natürlich irren.
Ansonsten wär' das mit dem Block-weisen einlesen 'ne Idee. Werd's mal ausprobieren und berichten ...
Bitte warten ..
Mitglied: 76109
16.10.2010 um 15:13 Uhr
Hallo StefanSch!

Zitat von StefanSch:
Hmmm. Wenn ich die Dokumentation von 'ADODB.Stream' aber richtig verstanden habe, lädt die Methode
'.LoadFromFile' beim Aufruf die gesamte Datei in den Arbeitsspeicher ( siehe z.B.
http://msdn.microsoft.com/en-us/library/ms677570(VS.85).aspx ). Kann mich natürlich irren.
Ansonsten wär' das mit dem Block-weisen einlesen 'ne Idee. Werd's mal ausprobieren und berichten ...
Meinen letzten Kommentar oben geändert:
Habe das mit dem Blockweisen einlesen mit einer Image-Datei versucht (ca 17GB), aber das funktioniert nicht, weil ADODB offensichtlich versucht, die komplette Datei in den Arbeitsspeicher zu laden

Gruß Dieter
Bitte warten ..
Mitglied: 76109
16.10.2010 um 17:39 Uhr
Hallo nochmal!

Andere Möglichkeit wäre vielleicht die Datei erst mit einem Datei-Splitter in 1-GB Blöcke zu zerlegen, zu ändern und wieder zusammenzufügen?

Hab's mal mit Windows-GSplit 3.0.1 und einer ca 21 GB-großen Datei in 1GB-Blöcken versucht und funktioniert recht gut.

http://software-portal.faz.net/windows/dateien-splitten-664

Gruß Dieter
Bitte warten ..
Mitglied: dog
16.10.2010 um 23:05 Uhr
Psst http://msdn.microsoft.com/de-de/library/system.io.filestream(VS.80).asp ...

VBS hat übrigens Zugriff auf die meisten .NET Klassen und Powershell auf alle.
Bitte warten ..
Mitglied: StefanSch
17.10.2010 um 09:48 Uhr
Gerade System.IO scheint mir den kompilierten Sprachen vorbehalten zu sein. VB, C++, C# usw. ja, VBS, Jscript nein ...
Bitte warten ..
Ähnliche Inhalte
PHP
Eigene Scriptsprache (3)

Frage von WPFORGE zum Thema PHP ...

TK-Netze & Geräte
gelöst SoHo VOIP-Telefon mit DECT-Funktionalität (4)

Frage von keine-ahnung zum Thema TK-Netze & Geräte ...

Sicherheit
PfSense: Vlan Funktionalität ohne Vlan fähigen AP (6)

Frage von sven784230 zum Thema Sicherheit ...

Sicherheitsgrundlagen
Das Security Triangle: Komfort vs Funktionalität vs IT-Sicherheit

Link von pewa2303 zum Thema Sicherheitsgrundlagen ...

Neue Wissensbeiträge
Entwicklung

Exploit Development

Anleitung von burhanudinn123 zum Thema Entwicklung ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(2)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
Leiten "dumme" Switches VLAN-Tags mit durch? (17)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...

Batch & Shell
Batch zum suchen und verschieben von Verknüpfungen (12)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Router & Routing
FTTH bzw FTTB Router (10)

Frage von ukulele-7 zum Thema Router & Routing ...