Speichern jeder Variante einer im Temp-Ordner erstellten, kontinuierlich wieder überschriebenen Datei in anderem Ordner

  • VBScript

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Speichern jeder Variante einer im Temp-Ordner erstellten, kontinuierlich wieder überschriebenen Datei in anderem Ordner

    Tach auch,

    ich setze regelmäßig ein Programm ein, mit dem in einem Viewer in ein bestimmtes, firmenspezifisches Dateiformat eingebettete, verschlüsselte jpegs angezeigt werden können. Eine Kopie des jeweils angezeigten Bildes wird mit der Endung .sbf unverschlüsselt im Windows Temp-Ordner gespeichert, beim Anzeigen der nächsten Datei im Viewer aber sofort wieder mit dem neuen Bild überschrieben.

    Ich benötige jetzt ein Programm, das die jpegs aus dem Temp-Ordner in einen anderen Ordner überträgt, bevor sie wieder überschrieben werden.

    Es wäre ideal, wenn man nur den Quell- und Ziel-Ordner eingeben müsste und das Programm dann das Gewünschte automatisch erledigt.

    Kann mir da jemand helfen?

    Im Voraus vielen Dank

    Carsten
    Hi,

    ich hoffe ich habe dein Problem richtig verstanden und probiere mal einen kleinen Ansatz zu liefern:

    Zuerst mit der FileSystemWatcher-Klasse überprüfen ob sich die Datei in dem Tempordner verändert. Falls eine neue Datei gespeichert wurde, kopierst du sie mit der FileSystem.CopyFile-Methode in den entsprechenden neuen Ordner. (Je nach Speicherort braucht dein Programm hierfür Admin-Rechte)

    Hoffe ich konnte ein wenig helfen...

    EDIT: Entschuldige, habe das VBScript-Label übersehen. So wäre es aber in VB.NET realisierbar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Limosoft“ ()

    Wäre für dich denn VB.NET akzeptabel ? Probiere am besten mal damit zu beginnen die genannten Funktionen/Klassen auf MSDN und weiteren Seiten nachzuschauen. Falls dies dein erstes VB-Projekt sein sollte hast du dir aber kein einfaches ausgesucht. ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Limosoft“ ()

    <p>Also so sein Programm kriege ich in knapp 5 Minuten hin. Im grunde genommen ist es recht einfach. Nehm erstmal (zum &uuml;ben) eine windows Form und schau dir den Bereich Komponenten an. Dass &Uuml;berwachen des Temp Ordners ist ja im grunde genommen das &quot;Komplizierteste&quot; f&uuml;r dich? Dass kannst du in Windows Forms erstmal Grafisch machen, sprich du ziehst den Filesystem Watcher einfach aus der Toolbox, &ouml;ffnest die eigenschaften und stellst dort den Tempr&auml;ren Ordner ein (Bei ProfOf Conzept ganz gut, sp&auml;ter aber am besten mit Enviromand Arbeiten^^) und dass wars.</p>

    <p>Ans Datei System kommst du mit My.Computer.Filesystem (Visual Basic) ran, oder mit Filesystem Namespace (Global auf .NET ebene also auch in Visual Basic, wo bei die option 2 die m&ouml;glichkeit biete den Coode sp&auml;ter auch mal zu Protieren.)</p>

    <p>So, als n&auml;chstes machst du nichts weiter als alles wie oben beschrieben zusammen zu basteln, F5 zu drcken und die windows form einfach immer offen zu lassen.</p>

    <p>Altanativ kannst du noch ein Notify Icon machen und endsprechend dort via Context Menu eine Kill / Beenden / Stop Funktion einsetzen, in Inizialize Component / Load Event machst du dann einfach Me.Visible = False damit das Fenster nicht mehr St&ouml;rt und dass wars dann.</p>

    <p>Andererseites kannst du dass Fenster aber auch f&uuml;r ein Log nutzen. Dass hat dann den vorteil dass du dann sehen kannst was du da Kopierst hast. Eigentlich sind der Funktionalit&auml;t keine Grenzen gesetzt.</p>

    <p>LG, J. Herbrich</p>

    carstue schrieb:

    Ich habe vom Programmieren so viel Ahnung wie ne Kuh vom Sonntag.
    Dann gibt's zwei Möglichkeiten:
    Du lernst es oder du lässt die Finger davon.

    Wenn du kein tieferes Interesse an "echter" Programmierung hast, dann löse dein Problem mit einem guten alten Batch-5-Zeiler:

    Quellcode

    1. IF NOT EXIST xxx\. MKDIR xxx
    2. :A
    3. SET d=%DATE%%TIME%
    4. SET ts=%d:~6,4%%d:~3,2%%d:~0,2%_%d:~10,2%%d:~13,2%%d:~16,2%
    5. IF EXIST xxx.tmp MOVE xxx.tmp xxx\xxx_%ts%.tmp
    6. TIMEOUT 5
    7. GOTO A

    Kopiere das als cmd-File in dein Temp-Verzeichnis und doppelklicke drauf.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich habe kein Interesse (oder besser: keine Zeit) Programmieren zu lernen und möchte daher einfach nur ein funktionsfähiges Progrämmchen, das die sbf-Datei, die in unregelmäßigen Abständen von 0,2 bis 1,0s immer wieder überschrieben wird, in einen anderen Ordner speichert.

    Wie kann ich da in der von dir beschriebenen batch-datei verwirklichen? der dateiname der sbf-Datei ändert sich bei jedem Überschreiben und soll mit dem jeweiligen Namen auch gespeichert werden.

    Viele Grüße, Carsten
    Nein. Schrieb ich ja eingangs. Mit dem Viewer, der das jpeg als .sbf im Temp-Ordner ablegt, schaue ich mir eine Vielzahl von Datensätzen an, die alle unterschiedliche Namen haben. Und nur zu dem jeweils betrachteten Datensatz liegt das jpeg als .sbf im Temp-Ordner. Öffne ich die nächste Datei mit dem Viewer, wird das alte sbf durch das neue überschrieben.
    Die Datei im Temp-Ordner heißt beispielsweise TmpDec_10000542_119.sbf. Die Zahlenfolge 10000542 ist die Nummer einer Messserie, innerhalb der Messserie sind die Datensätze durchnummeriert. TmpDec_10000542_119.sbf wird also beim Öffnen des nächsten Datensatzes im Temp-Ordner durch TmpDec_10000542_120.sbf ersetzt. Im temp-Ordner ist jeweis nur eine sbf-Datei.

    Die Formulierung, dass die alte Datei gelöscht und eine neue erstellt wird, entspricht somit wohl dem, was tatsächlich passiert.


    Wenn die Dateien schon eindeutig sind, ist die Grundvorgehensweise noch einfacher.

    Quellcode

    1. SET tmp=c:\temp\
    2. set x=*.sbf
    3. IF NOT EXIST %tmp%SBF\. MKDIR %tmp%SBF
    4. :A
    5. FOR %%f IN (%tmp%%x%) DO MOVE %%f %tmp%SBF\
    6. TIMEOUT 1
    7. GOTO A

    Allerdings wird durch die kurze Lebensdauer der Dateien die Chance, dass du eine nicht triffst, weil die vom Viewer schon gekillt wurde, wesentlich höher.
    Ich habe jetzt einen Timeout von einer Sekunde eingebaut.
    Theoretisch kannst du den auch noch rausnehmen, aber dann hast du Performance-Probleme.
    Wenn du einen kleineren Timeout als 1s möchtest, wird's mit Bordmitteln von CMD schwierig.
    Du könntest dann höchstens einen Hack anwenden und anstatt dem timeout einen ping mit 100ms Wartezeit absetzen.
    ping -n 1 -w 100 1.1.1.1
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()