WinCC Flexible Datei-/Ordnergröße ermitteln

Dennis2012

Member
Beiträge
12
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich habe folgendes VB Script für WinCC Flexible geschrieben um die Dateigröße herauszufinden und an die SPS weiterzuleiten:

Code:
Dim FName, fso, fs, s


'FName = "\WinCCStorage\test\" ' Ordnername
FName = "\Storage Card MMC\WinCC\test\dataLogging.txt"		'Angabe 383 Byte
' FName = fso.Dir ("\Storage Card MMC\WinCC\test\*.*", 0 ) ' hie rrüber eventuell alle Dateien ermitteln und Werte addieren?
 
 ' FileSystemObject erstellen
  Set fso = CreateObject("FileCtl.FileSystem") 


 ' FileObject erstellen
 Set fs = CreateObject("FileCtl.File")

s = fso.FileLen(FName)      
 '  SmartTags ("Speichergroesse") = s
   
 ' Wenn Datei 0 Byte groß, dann ist sie neu
 ' s = fs.FileLen(FName)  
'' Do While FName <> 0
 'fso.MoveFile "\Storage Card MMC\WinCCStorage\backup\" & Datei, "\Storage Card USB\" & Datei		'\Storage Card CF\test\
 '' FName = fso.Dir
 ''s = fso.FileLen(FName) + s


'' Loop



   ShowSystemAlarm s


Damit kann ich jedoch nur ermitteln wie groß eine Datei ist.

Wie muss die Schleife aussehen, dass er alle Dateigrößen der Dateien in dem Ordner test ermittelt, addiert und in die Variable s schreibt?

Vielen Dank!

LG
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
19.507
Punkte Reaktionen
5.877
Code:
Set fso = CreateObject("FileCtl.FileSystem")
s = 0

FName = fso.Dir("\Storage Card MMC\WinCC\test\*.*", 0 )
'FName = fso.Dir("\Storage Card MMC\WinCC\test\*.*", 7 ) '<-- evtl. so für fsAttrReadOnly + fsAttrHidden + fsAttrSystem
Do While FName <> ""
    s = s + fso.FileLen(FName)
    FName = fso.Dir()
Loop

Harald
 
OP
D

Dennis2012

Member
Beiträge
12
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hey,

vielen Dank. Habe Deinen Code ausprobiert, allerdings schreibt er dann immer non functional procedure in Script...

Ich habe den Code dann mal so umgeschrieben:

Code:
Dim FName, fso, fs, s, i, d


Set fso = CreateObject("FileCtl.FileSystem")
s = 0
i = 0
FName = "\Storage Card MMC\WinCCStorage\backup\*.*" 

Do
	 d = fso.FileLen(FName) 'Wert in Byte
	 s = s + d 
	 s = s / 1024 'Umrechnung in kB
	 s = s / 1024 'Umrechnung in MB
	 i = i + 1
	
Loop While i < 100
 
 'If i = 100 Then s = 0
 
  ' ShowSystemAlarm s
  SmartTags("Speicherverwaltung.Dateigroesse") = s

Jetzt Schreibt er mir einen Wert in die Variable s, dieser ändert sich aber nicht mehr. Erst wenn ich fast alle Dateien rauslösche aber dann sind es auch immer nur 2 feste Werte die in s stehen.
Die 100 Schleifendurchgänge habe ich mal angenommen, da er dass ja mit Deinem Code nicht endlos machen kann.

Wo liegt der Fehler im Bild?

Danke
 

faust

Well-known member
Beiträge
571
Punkte Reaktionen
134
Hallo,

es fehlt der Aufruf der Funktion 'FName = fso.dir(FName)' VOR dem ersten Schleifendurchlauf bzw. 'FName = fso.Dir()' IN der Schleife.


Gruß, Fred
 
OP
D

Dennis2012

Member
Beiträge
12
Punkte Reaktionen
0
Du meinst so:

Code:
[COLOR=#333333]Dim FName, fso, fs, s, i, d
[/COLOR]
Set fso = CreateObject("FileCtl.FileSystem")
s = 0
i = 0
FName = "\Storage Card MMC\WinCCStorage\backup\*.*" 
[COLOR=#3E3E3E]FName = fso.dir(FName)
[/COLOR]
Do     

d = fso.FileLen(FName) 'Wert in Byte     
s = s + d      s = s / 1024 'Umrechnung in kB     
s = s / 1024 'Umrechnung in MB    
 i = i + 1
[COLOR=#3E3E3E]FName = fso.Dir()[/COLOR]    

Loop While i < 100 

'If i = 100 Then s = 0   

' ShowSystemAlarm s   
[COLOR=#333333]SmartTags("Speicherverwaltung.Dateigroesse") = s[/COLOR]

Aber ist es dann nicht wieder das Selbe wie vorher was nicht funktioniert? Kann es erst am Wochenende austesten...
 

faust

Well-known member
Beiträge
571
Punkte Reaktionen
134
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

bei der ersten Pfadangabe musst du nur den Ordnernamen angeben, die weiteren Aufrufe 'fso.Dir()' liefern dir dann die einzelnen Dateien in diesem Verzeichnis.


Gruß, Fred
 
OP
D

Dennis2012

Member
Beiträge
12
Punkte Reaktionen
0
Code:
Dim FName, fso, fs, s, i, d


Set fso = CreateObject("FileCtl.FileSystem")
s = 0
i = 0
FName = "\Storage Card MMC\WinCCStorage\backup\" 
FName = fso.dir(FName)


Do     


d = fso.FileLen(FName) 'Wert in Byte     
s = s + d      s = s / 1024 'Umrechnung in kB     
s = s / 1024 'Umrechnung in MB    
 i = i + 1
FName = fso.Dir()    


Loop While i < 100 


'If i = 100 Then s = 0   


' ShowSystemAlarm s   
SmartTags("Speicherverwaltung.Dateigroesse") = s
 

faust

Well-known member
Beiträge
571
Punkte Reaktionen
134
Du solltest sicherstellen, dass
1. fso.Dir() eine Datei zurückgibt,
2. die Schleife beendet wird, sobald fso.Dir() "" zurückgibt.


Gruß, Fred
 

faust

Well-known member
Beiträge
571
Punkte Reaktionen
134
Hallo Dennis2012.

Entschuldige bitte, aber...


Du hast doch das Script eigentlich schon fast fertig präsentiert bekommen. Meine letzten Hinweise bedingen nur eine Abänderung des bestehenden Codes deinerseits an den richtigen Stellen, und das sollte dir möglich sein.

Oder hast du das Script nicht wirklich verstanden? Hast du schon mal in die VBScript-Hilfe von Siemens geschaut, da steht eine genaue Beschreibung der Funktionsweise des Befehls 'fso.Dir()'.


Nicht für ungut, aber eine fertige Lösung von mir bringt dir nichts, wenn du sie nachher nicht sicher weiterverwenden kannst.


Gruß, Fred
 
Oben