16568
Goto Top

Datei kopieren, Zeitraum dafür aber sehr kurz

Ja, ich weiß, doofer Titel, aber ich weiß nicht, wie ich das sonst am Besten formulieren soll.

Ich habe einen Ordner, in dem 2 Dateien abgelegt werden.
Die eine Datei ist nicht bekannt.
Der Zweite ist bekannt.

Jetzt bin ich schon seit 4 Stunden auf der Suche nach einer Lösung, wie ich die Dateien in ein anderes Verzeichnis kopieren kann.

Der Trick dabei:

Die Dateien sind vielleicht eine viertel-Sekunde da (temp-Datei, eine davon hat sogar das Format: xxx~, also keine Dateiendung, und am Ende eine Tilde face-sad )

Es ist für mich aber außerordentlich wichtig, an die beiden Dateien zu kommen.
Denn in den beiden Dateien hoffe ich die Antwort auf meine Frage zu finden, wieso ein von mir erstelltes Programm die Dateien nicht richtig ablegt, wo es soll. Auf den anderen bisher getesteten Rechnern hingegen funktioniert das TADELLOS *grrrr*

@Biber: God of Batch, ich beziehe Dich auch in mein Nachtgebet ein face-big-smile


Lonesome Walker
edit:
Es ginge auch, wenn der Ordnerinhalt nicht mehr gelöscht werden könnte.
Nach dem Motto: reinschreiben darf mein Programm, nur rauslöschen darf keiner mehr...

Geht das???

Content-Key: 38151

Url: https://administrator.de/contentid/38151

Printed on: April 19, 2024 at 11:04 o'clock

Member: cykes
cykes Aug 17, 2006 at 05:28:15 (UTC)
Goto Top
Hi,

so eine spontane Idee, vielleicht kannst Du beim Starten Deine Programms
einfach die Task Priorität runterschrauben, so daß es etwas langsamer läuft.
Oder lass doch mal den Debugger Schritt-für-Schritt drüberlaufen (ist bei grossen
Projekten sicher nervig, aber manchmal geht's ned anders) face-wink

Gruß

cykes
Member: Supaman
Supaman Aug 17, 2006 at 06:54:13 (UTC)
Goto Top
könnte man das nicht über dateirechte lösen? soweit ich weis, gibt es für lesen, erstellen, ändern und löschen einzeln zu vergebende rechte.. also für den user der das programm ausführt bzw den ordner die löschen-rechte entfernen.
Mitglied: 16568
16568 Aug 17, 2006 at 08:46:26 (UTC)
Goto Top
@cykes: LOL, das Debuggen hat er direkt abgebrochen; ich liebe VS 2005...
@Supaman: Nein, das läßt sich so nicht lösen, denn dann wird zwar die Datei gerade noch erstellt, die bleibt dann aber leer. Ich habe aber schon gesehen, daß die 3kB groß war.


Lonesome Walker
Member: Biber
Biber Aug 17, 2006 at 09:52:46 (UTC)
Goto Top
Moin Lonesome Walker,

das wird schwierig, fürchte ich.

Versuchen könnetest Du, mit einem Endlos-Batch diese Dateien zu sichern.
Der kleine Schnipsel unten würde, wenn er einmal gestartet ist, in einer Endlosschleife
alle vorhandenen Dateien größer 0 Byte aus einem Verzeichnis %LSWtemp% in ein Verzeichnis %LSWSik%
kopieren. Und bei den Zieldateien einen Timestamp dranhängen.

Da es kein Kriterium gibt, dass diese Endlosschleife "fertig werden" lässt, habe ich es mit einer Flag-Datei gelöst.

Der untenstehende batch müsste also so gehandhabt werden:
- wenn Dein Temp-Datei-erzeugendes Programm gestartet wird, parallel ein CMD-Fenster öffnen.
Dort eingeben:
Start /min [Pfad\]LswSaveTemps.bat
Im Hintergrund läuft jetzt der Batch und kopiert und kopiert und kopiert....
Wenn es genug ist, dann vom CMD-Prompt abschicken:
echo x>%temp%\stop
..dann endet der Batch.
[Alternativ könntest Du natürlich im Batch prüfen, ob Dein Programm noch in der Liste der laufenden Prozesse ist.
(tasklist|find /i "myProggi.exe" >nul)|| goto :eof  
..und das als Abbruchkriterium nehmen.

Egal, hier die Rohfassung des LSWSaveTemps.bat. Das GROSSgeschriebene "@ECHO" muss wieder zum Scharfmachen gelöscht werden.


:: ---- snipp LSWSaveTemps.bat----------
@echo off & setlocal
Set "LSWtemp=d:\temp\lswtemp"  
set "LSWSik=d:\temp\lswsik"  
if exist %temp%\stop del %temp%\stop
:doItAgain
for /f "tokens=1-4 delims=:," %%a in ("%time%") do set mytime=%%a%%b%%c%%d  
for %%i in (%lswtemp%\*.*) do if %%~zi GTR 0 @ECHO copy /y %%i "%lswsik%\%mytime%*.*"  
if not exist %temp%\stop goto doItAgain
:: ---- snapp LSWSaveTemps.bat----------

Demo am CMD-Prompt (ohne START-Schalter "/MIN", damit was zu sehen ist):
$cmd$start LswSavetemps.bat
Z:\>
##### ---irgendwann später dann:
$cmd$echo.>%temp%\stop

Im Hintergrund öffnet sich ein zweites CMD-Fenster, in dem endlos so etwas scrollt:
....
copy /y d:\temp\lswtemp\New25293.ini "d:\temp\lswsik\11193269*.*"  
copy /y d:\temp\lswtemp\New20136.ini "d:\temp\lswsik\11193269*.*"  
copy /y d:\temp\lswtemp\New4121.ini "d:\temp\lswsik\11193272*.*"  
copy /y d:\temp\lswtemp\New25293.ini "d:\temp\lswsik\11193272*.*"  
copy /y d:\temp\lswtemp\New20136.ini "d:\temp\lswsik\11193272*.*"  
copy /y d:\temp\lswtemp\New4121.ini "d:\temp\lswsik\11193275*.*"  
copy /y d:\temp\lswtemp\New25293.ini "d:\temp\lswsik\11193275*.*"  
copy /y d:\temp\lswtemp\New20136.ini "d:\temp\lswsik\11193275*.*"  
copy /y d:\temp\lswtemp\New4121.ini "d:\temp\lswsik\11193280*.*"  
copy /y d:\temp\lswtemp\New25293.ini "d:\temp\lswsik\11193280*.*"  
copy /y d:\temp\lswtemp\New20136.ini "d:\temp\lswsik\11193280*.*"  
....

Soweit dieser Ansatz.
Allerdings fürchte ich, dass es daran scheitern wird, dass diese Tempdateien ja NEU angelegt werden und das vermutlich mit der Mimik
nHandle = FCreate(...) --->von diesem Zeipunkt an ist die Datei da, aber mit Größe 0 Byte
FWrite( nhandle,.....)
....
...
FWrite( nhandle,.....) ------------> auch wenn jetzt ganz viel geschrieben wurde: immer noch 0 Byte im Dateisystem
FClose(nHandle) -------->und erst hier hat die Datei eine Größe > 0 Byte

Es kommt also darauf an, ob die Programmierer deines Proggis den Inhalt dieser Temp-Datei anderen Programmteile als Datei zugänglich machen wollten ( dann existiert die Tempdatei mit einer Größe > 0 Byte für einen spürbaren Zeitraum) oder ob sie nur das Dateihandle weiterreichen... dann hat die Datei durchgehend bis zum FClose() eine Größe von 0 Byte und das Kopieren wird nix.

Hope That Helps
Biber
Mitglied: 16568
16568 Aug 17, 2006 at 13:27:12 (UTC)
Goto Top
Danke Biber.

Folgende Situation:

Das Prog habe ich selbst geschrieben face-big-smile
Von daher bin ich bald am Ausrasten, weil es eben nur auf meiner Kiste die temporäre Datei erzeugt, anstelle direkt im richtigen Verzeichnis, wie ich's eigentlich festgelegt hatte.

Die Datei ist je nach verarbeiteter Datenmenge mal größer als 1-2kB, mal kleiner...
Ich habe gestern/heute morgen eine laaange Batch erstellt, nach dem Motto copy C:\temp\*.* C:\temp\copy\*.*

Hat wunderbar funktioniert, bis auf den Fehler, daß auf die Datei gerade nicht zugegriffen werden kann, weil sie gerade von einem anderen Prozeß verwendet wird.

Das VS2005 habe ich auch neu installiert, trotzdem ist ein Debuggen unmöglich (einmal sogar einen Bluescreen *ironisch-freu*)

Im Endeffekt sollte nur eine Textdatei mit einem bestimmten Inhalts-Format erstellt werden, und dies in einem vordefinierten Ordner (logisch, mein Applikationsordner).
Überall anders wird die Datei zuerst im Applikationsordner angelegt, dann mit Inhalt gefüllt, dann geschlossen.
Nur bei mir hier zickt er rum.

Da ich eine zukünftige Funktionalität aber gerne bestätigt hätte, würde ich dem Problem gerne auf den grunud gehen.

Das mit Ordner-Berechtigung habe ich schon längst durch, der erstellt dann die Datei, kann aber nix mehr reinschreiben *mistaberauch*


Lonesome Walker
Member: cykes
cykes Aug 18, 2006 at 06:43:36 (UTC)
Goto Top
Dann musste wohl nen Praktikanten (is ja grad modern...) mit einem TEMP-Dateien-Kescher
anstellen *kleiner Scherz*

Vielleicht hilft Dir dieses PC-Welt Tool: http://www.pcwelt.de/downloads/heft-cd/06-06/137147/index.html


Gruß

cykes

[EDIT] Habe hier noch ein Tool gefunden, das könnte eher helfen:
http://www.bestsoftware4download.com/software/t-free-allsync-download-a ...
bzw. http://www.allsync.biz/en_index.htm
Mitglied: 16568
16568 Aug 18, 2006 at 08:14:12 (UTC)
Goto Top
Das mit dem Praktikanten: IDEE!!!face-big-smile

Das Tool is zwar lustich, weils funktioniert; aber es kann mir die Datei auch nicht kopieren face-sad


Trotzdem danke.

Lonesome Walker
PS: *praktikantensuch*
Member: cykes
cykes Aug 18, 2006 at 08:47:53 (UTC)
Goto Top
auch das Tool in dem [EDIT] nicht? Das erste macht glaub nur logging, wie ich vorhin festgestellt habe, das zweite ist eine Synchronisierungs-Software.
Insbesondere hat diese das Feature, wenn in dem überwachten/synchronisierten Ordner eine Datei gelöscht wird, sie im Sync-Ordner in den Papierkorb zu verschieben, wo man sie natürlich wieder rausholen kann.... Vielleicht hilft das ja ...