witam.
Czy może ktoś pomóc mi stworzyć programik który:
Musi czytać katalog i czekać na plik Data.txt, gdy pojawi sie plik Data.txt, ma tworzyć pusty plik tekstowy o nazwie Lock.txt.
pod windows jesli to ważne
i to wszystko...
dzięki za pomoc
witam.
Czy może ktoś pomóc mi stworzyć programik który:
Musi czytać katalog i czekać na plik Data.txt, gdy pojawi sie plik Data.txt, ma tworzyć pusty plik tekstowy o nazwie Lock.txt.
pod windows jesli to ważne
i to wszystko...
dzięki za pomoc
Powiedz może jaki język wybrałeś (lub czy jest to obojętne) i co już napisałeś.
w zasadzie nie mam zielonego pojecia o programowaniu, ale musze miec taka funkcję do prawidłowego działania innego programu.
Jezyk obojetny, ma tylko robić swoje zadanie. Mozesz mi pomóc?
W Pythonie by to było coś takiego:
import time
import os.path
SLEEP_TIME_IN_SECS = 1
CHECKED_PATH = "tutaj ścieżka do folderu"
CHECKED_FILE = "Data.txt"
LOCK_FILE = "Lock.txt"
while True:
if os.path.isfile(os.path.join(CHECKED_PATH, CHECKED_FILE)):
open(os.path.join(CHECKED_PATH, LOCK_FILE), "a").close()
break
else:
time.sleep(SLEEP_TIME_IN_SECS)
Nad bardziej windowsowym rozwiązaniem nie chce mi się myśleć, nie administruję tym, więc nie wiem, w czym się na to skrypty pisze.
Dzięki,
jak mam uruchomić teraz ten skrypt? tak by działał w tle lub po recznym uruchomieniu gdy bede potrzebował?
Stwórz plik wsadowy (*.bat) o poniższej treści w lokalizacji, którą chcesz monitorować.
Pod Windowsem powinno się bez problemu odpalić.
@ECHO OFF
SET LookForFile= "Data.txt"
:CheckForFile
IF EXIST %LookForFile% GOTO FileExists
TIMEOUT /T 1 >nul
GOTO CheckForFile
:FileExists
COPY NUL Lock.txt
super, o to chodziło proste i skuteczne.
To może jeszcze rozszerzymy:
by plik Lock.txt zapisywał sie w konkretnym katalogu np. C:/ABC
To może sobie rozszerzysz? Zmiana nazwy pliku w tym gotowcu raczej nie jest trudna.
Oprócz zapisania w konkretnym katalogu na dysku musiałby pracować i czytać "miejsce" cały czas by automatycznie tworzyć plik Lock.txt zawsze gdy tylko się pojawi Data.txt. Aktualnie plik.bat musi być uruchamiany za każdym razem i działa jednorazowo.
Nie no, może nie przesadzajmy z tym trzymaniem za rączkę… Napisz całą specyfikację i podaj budżet, albo wprowadzaj sobie te zmiany samemu.
poprawek nie będzie :)
to wszystko co potrzebuje i wielkie dzięki za pomoc, dla was to nie problem napisać kilka linijek, zwłaszcza że to program na poziomie raczkujących w programowaniu? dla mnie to zgłębianie tematu od podstaw...
Wiem że musiałeś poświecić sporo czasu by nauczyć się tego i nie chodzi mi o to by dla kogoś robić za free ale nie za wszystko trzeba brać pieniądze. A swoją droga na ile byś wycenił swoją pracę przy tak skomplikowanym projekcie?
No to może inaczej. Skoro jesteście na tym forum to po co? by szukać pracy?
Więc może jakoś mnie naprowadzicie i podsunięcie rozwiązanie bezpłatnie? może się czegoś dzięki wam nauczę?
Mając ten kod podany przez "wisensane", czy wystarczyło by jakoś zapętlić by działał cały czas i spełniał moje założenia?
Na forum ludzie pomagaja osobom ktore faktycznie potrzebuja pomocy przy programowaniu, a nie oczekuja gotowcow
Więc może jakoś mnie naprowadzicie i podsunięcie rozwiązanie bezpłatnie? może się czegoś dzięki wam nauczę?
Jasne. Rozwiązaniem dla Twojego pierwotnego problemu jest na przykład następujący (mój) skrypt: Automatyczne tworzenie pliku tekstowego
Naprowadzam całkiem za darmo. Wyręczam za pieniądze. Ot, taki dziwny jestem.
Od wisensane dostałeś inny, w innym języku. Działa on tak, że po znalezieniu pliku Data.txt
tworzy Lock.txt
i kończy, a jak nie znajdzie to czeka sekundę i powtarza szukanie. Chcesz zmienić go tak, żeby po nie znalezieniu kasował Lock.txt
i też powtarzał.
Skrypt działa poprawnie.
Ale musi działać cały czas, więc:
Gdy widzi plik Data.txt - tworzy plik Lock.txt.
Nie musi kasować ponieważ robi to inny program, który czyta rezultat z plików Data i Lock.
Więc gdy "inny program" skasuje oba pliki (po ich odczytaniu), skrypt ma oczekiwać na kolejny plik Data i robić to samo w kółko.
Mhm. Czyli po etykiecie :FileExists
chcesz dodać oczekiwanie przez sekundę i skok do :CheckForFile
.
tak, tą sama operację musiałby wykonywać cały czas, nie zamykając procesu do momentu ewentualnego zamknięcia programu. Plik Data.txt jest generowany recznie po przycisku wiec programu musi tylko czekać na ten plik (zawsze z ta samą nazwą Data.txt)
No, to już wiesz co zrobić. Pozostaje Ci albo znaleźć w tamtym kodzie, albo wyguglać, jak się w plikach bat robi skok, a jak oczekiwanie.
dzieki. dodałem na końcu kodu:
TIMEOUT /T 10 >nul
GOTO CheckForFile
dodałem jeszcze
move Data.txt c:\DMO
move Lock.txt c:\DMO
skad bedą odczytywane oba pliki po czym kasowane
Jeszcze raz dzięki, nawet sie czegoś nauczyłem.
Pozdrawiam wszystkich