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, 5168 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Netzwerk
Windows SCCM vs Puppet + Chocolatey (2)

Frage von eglipeter zum Thema Windows Netzwerk ...

Windows Server
Windows Firewall Einstellungen für OpenVPN Tunnel (3)

Frage von Aubanan zum Thema Windows Server ...

Windows Server
Windows Server 2012 R2 Benutzerkonto für Zugriff auf AD Benutzer (1)

Frage von JulianOhm zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...