Inhalte eines Ordners prüfen
-
Hallo,
kurze präzise Frage

Ich habe eine gewissen Anzahl von Datein die in ein Ordner kopiert werden soll..
diese sollen aber nicht alle Gleichzeitig in den Ordner sonder erst wenn der Ordner leer ist...
soll EINE von den 500 rein kommen...
ist diese verschwunden soll nach einer bestimmten sekundenanzahl x= die neue reinokommen...das so soll lange gehen bis die 500 datein alle im ordner waren...
wie geht das ?
-
Hallo
dazu brauchst du einen TTimer, FindFirst/FindNext zum durchsuchen des Ordners und die WinAPI-Funktionen CopyFile/MoveFile zum Kopieren.
bis bald
akari
-
oh man... du kannst echt probleme haben...

einfach:
nimm nen timer und frage in nem festen intervall dein verzeichnis ab. überprüfe ob sich dateien darin befinden (FindFirst, FindNext). wenn ja dann mach was damit, wenn nicht, dann kopieren eine ne hinein (CopyFile).
einfach schöner:
nimm eine komponente (http://www.ricosonntag.de/download/bcb/RSDirMonitor.zip) die auslöst, wenn eine datei ins verzeichnis kopiert/gelöscht wird und reagiere darauf.

-
Klappt nicht wie ich das will mit dem Timner
TTimer *timer1; timer1 = new TTimer(Form1); if (Query1->Fields->Fields[9]->AsString == "ISDN") { timer1->Interval = 500; timer1->OnTimer = doIt; } void __fastcall TForm1::doIt(TObject *Sender) { Memo1->Lines->SaveToFile("C:\\T_ISDN\\"+Query1->Fields->Fields[0]->AsString+"_nerv.gtw"); Memo1->Lines->Clear(); }wieso.. Er wartet zwar mit dem timer aber er füllt dann nicht richtig aus...
das doch alles kagge gibts denn nicht ne einfache funktion wo ich sagez=1000
ohne was passiert dannnach der 1 sec soll er einfach weitermachen wo ich den timer einsetze mehr net
-
Sleep(1000);
-
Hallo
Debugge und schau, was in Query1->Fields->Fields[0]->AsString zum Zeipunkt des OnTimer steht.
Desweiteren : warum benutzt du TTimer nicht als Komponente über den Formulardesigner?
bis bald
akari
-
Mit dem Sleep ist schon ne feine Sache nur reagiert mein Programm dann nicht mehr sonder hängt nur im Tray rum bis alles vorbei ist das ein Problem

-
Willst du den Kuchen nun essen oder behalten?

-
azad187 schrieb:
Mit dem Sleep ist schon ne feine Sache nur reagiert mein Programm dann nicht mehr sonder hängt nur im Tray rum bis alles vorbei ist das ein Problem

Deshalb sollst du ja auch Timer verwenden.
-
Was wird denn das für eine Anwendung ?
Kann absolut nicht nachvollziehen wozu sowas gut sein soll.
Willst du allen Kunden nacheinander 500 EMails schicken ?
-
ja gut ehh dann müsste ich erstmal wissen wie das geht.
warum kann man denn net infach sagen
Timer1->OnTimer
{
Hier was er nach den 3 sek alles machen soll und net extra void
}und danach das ganze wieder von vorne

if (Query1->Fields->Fields[9]->AsString == "ISDN") { Timer1->Enabled=true; Timer1->Interval=3000; Timer1->OnTimer; Memo1->Lines->SaveToFile("C:\\T_ISDN\\"+Query1->Fields->Fields[0]->AsString+"_ODDEST.gtw"); Memo1->Lines->Clear(); Timer1->Enabled=false; }funzt aber so leider nicht soll aber so funzen sinngemäß

-
Genau so funktioniert es doch
a) benutze die Komponente
b) was ist dasTimer1->OnTimer;
Im OnTimer Ereignis als erste Zeile
Timer1->Enabled=false;... hier das was erledigt werden soll
als letzte Zeile
Timer1->Enabled=true;Das ist ganz einfach
-
if (Query1->Fields->Fields[9]->AsString == "ISDN") { Timer1->Enabled=true; Timer1->Interval=3000; Timer1->OnTimer; Memo1->Lines->SaveToFile("C:\\T_ISDN\\"+Query1->Fields->Fields[0]->AsString+"_ODDEST.gtw"); Memo1->Lines->Clear(); Timer1->Enabled=false; }Wenn du deinen Timer startest, heisst das nicht, das das Programm dann bis auf das OnTimer Ereignis wartet ....

-
if (Query1->Fields->Fields[9]->AsString == "ISDN") { Timer1->OnTimer = Timer1Timer; }void __fastcall TForm1::Timer1Timer(TObject *Sender) { Timer1->Enabled=false; Memo1->Lines->SaveToFile("C:\\T_ISDN\\"+Query1->Fields->Fields[0]->AsString+"_nerv.gtw"); Memo1->Lines->Clear(); Timer1->Enabled=true; }so hab ich das nach deiner Aussage müsste er ja jetzt jedsmal 3000msec warten und dann alles eintragen wie vorher macht er aber net.
-
Mein Programm muss aber warten 3 sec nach dem ersten durchlauf
bevor meine 2ter schleifendurchlauf anfängt muss es 3sec warten koste was es wolle nur es darf nicht so sleepen dann ist es ja im tray und überlastet alles
-
Wieso, er macht doch das was du ihm sagst.
OnTimer ausgelöst:
Timer1->Enabled=false;//Timer anhalten Memo1->Lines->SaveToFile("C:\\T_ISDN\\"+Query1->Fields->Fields[0]->AsString+"_nerv.gtw");//Inhalt von Memo1 speichern Memo1->Lines->Clear();//Memo1 löschen (d.h. wenn du es nicht innerhalb von 3 Sek wieder füllst speichert er ein leeres Memo) Timer1->Enabled=true;//Timer wieder neu starten
-
Ja dann kann ich nunmal nix mit dem Timer anfangen
er soll einfach nur am Ender der Schleife 3Sekunden warten bis er wieder anfängt checkt ihrs net der timer timt zawr blöde rum hält aber meine schleife net davon ab weiter zu machen !!!
-
Will doch nur das einfachste von der welt
WENN 3 SEKUNDEN VERGANGEN MACH WEITER

kann doch net sein das es so eine Funktion in c++ nicht gibt???
Sleep(3000); ist schon fast perfekt nur das das programm nicht mehr reagiert ist voll bekloppt

-
Dann musst du dir vielleicht mal überlegen, ob du deine Schleife überhaupt brauchst ???
Mach das was in deiner Schleife passiert im OnTimer Ereignis ....
-
Du hast doch einen konzeptionellen Fehler!
er soll einfach nur am Ender der Schleife 3Sekunden warten bis er wieder anfängt checkt ihrs net der timer timt zawr blöde rum hält aber meine schleife net davon ab weiter zu machen !!!
Und -sorry- Schreibe ohne Dialekt mit Satzzeichen, dann kann man die Texte auch verstehen