Licznik generacji danych

0

Mój program generuje dane do pliku tekstowego.
Pierwsza linijka w owym pliku to liczba przedstawiająca który raz dane zostały wygenerowane.

Pytanie brzmi czy istnieje możliwość utworzenia takiej zmiennej która będzie przechowywała ile razy dane zostały wygenerowane? oczywiście chodzi mi tu o sytuacje gdy program jest uruchamiany wielokrotnie?
Czy muszę zapisywać ta liczbę na dysku i przy każdym uruchomieniu ja wczytywać?

0

Nie ma takiej zmiennej.

Przechowuj te dane w pliku binarnym.

Możesz się także zabawić, zapisując to:
a) w rejestrze
b) w bazie danych
c) w pliku INI
d) w pamięci EEPROM (tylko weź znajdź PC'ta z tym, lol)

0

nie da się jakoś tego obejść? żebym nie musiał zapisywac tego na dysku?
np. jak bym wpisał tą liczbę jako komentarz pliku?

1

Gdziekolwiek byś tego nie zapisał - czy w rejestrze, czy w bazie danych czy w "komentarzu pliku" (o cokolwiek chodzi) to zapisze się to gdzieś na dysku (tylko w różnym miejscu i w różnej postaci).
Więc może sprecyzujesz jak tego nie chcesz zapisywać i czemu

Jedyna opcja to żeby zapisywać to na innym, zdalnym serwerze co nie zmienia tego że również zapisze się to na dysku tylko że innego komputera...

0

Możesz zapisać stałą, którą ręcznie w .exe będziesz zmieniał.

Jeśli to ma być AŻ TAK TAJNE, to rejestry są dla Ciebie.

2

jeśli chcesz "ukryć" tę zmienną to dobrym pomysłem wydają mi się na przykład alternatywne strumienie NTFS (o których istnieniu nie wie nawet część zaawansowanych użytkowników)

zapisujesz osobno dane i liczbę w dwóch różnych strumieniach pliku w ten sposób:

echo dane >plik.txt
echo 15 >plik.txt:zmienna

odczytujesz tak:

type plik.txt
more < plik.txt:zmienna

(w językach programowania obsługa jest zazwyczaj banalnie prosta - czytamy i zapisujemy jak do zwyczajnego pliku)

alternatywne strumienie będą się przenosić razem z plikiem o ile będziemy go przenosić w obrębach partycji NTFS - "zmienna" zostanie więc zapamiętana nawet po "format C" w przeciwieństwie do rejestru
ale strumienie zostaną stracone na przykład w przypadku spakowania pliku winrarem (chyba że w ustawieniach "Advanced" zaznaczymy "Save file streams"), lub przeniesienia przez partycję w innym systemie plików (na przykład poprzez pendrive)

0
unikalna_nazwa napisał(a):

"komentarzu pliku" (o cokolwiek chodzi) .

Chodziło mi o komentarz mojego programu. Ten który widzimy jak klikamy na właściwości programu.

Zależało by mi, żeby nie tworzyć żadnego innego pliku. Tylko, żeby jakaś zmienna w programie mi to ciągle trzymała.

Mam pewnie rozwiązanie właśnie z tym komentarzem ale wydaje mi się brzydkie, dodatkowo nie wiem czy w ogóle zadziała bo musze zrobić operacje na działającej aplikacji, jednak zobrazuje o co mi chodzi.

  1. klikam przycisk generuj dane( tworzy się plik z danymi z nagłówkiem 1234, bo tyle wynosi licznik ).
    Ten plik jest zaraz konsumowany przez inny program i później nie mam do niego dostępu.
  2. zmieniam komentarz mojej aplikacji z 1234 na 1235 ( SetFileVersionInfo )
  3. wczytuje nowy komentarz do zmiennej ( GetFileVersionInfo )
0
TLesiu napisał(a)

Chodziło mi o komentarz mojego programu. Ten który widzimy jak klikamy na właściwości programu.

Gra nie warta świeczki... Według mnie nie warto kombinować tylko po to, by jedną malutką liczbę gdzieś na siłę schować; Jeśli nie jest aż tak ważna/tajna, to nie ma sensu się tym trudzić;

TLesiu napisał(a)
  1. klikam przycisk generuj dane( tworzy się plik z danymi z nagłówkiem 1234, bo tyle wynosi licznik ).
    Ten plik jest zaraz konsumowany przez inny program i później nie mam do niego dostępu.
  2. zmieniam komentarz mojej aplikacji z 1234 na 1235 ( SetFileVersionInfo )
  3. wczytuje nowy komentarz do zmiennej ( GetFileVersionInfo )

Tylko zwróć uwagę na to, że dopóki aplikacja jest uruchomiona - nie mażesz modyfikować zawartości pliku *.exe (brak praw do zapisu), więc albo zmodyfikuj te dane po zamknięciu programu (np. jakimś prostym skryptem), albo zrezygnuj z kombinacji.

0

nigdy tego nie robiłem, ale gdzieś czytałem, że można niejako do aplikacji "wkompilować" plik np. tekstowy? resources chyba to się nazywało. Czy jest mozliwość wykorzystania tego mechanizmu to wykombinowania tego?

Już odpuściłem, ale drążę temat z ciekawości.

0
  1. Możesz schować tę liczbę w polu data i czas utworzenia lub modyfikacji pliku.
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Daje Ci to maksymalną wartość do 360000 (opisują rozdzielczość jako 10 ms) - jeśli nie chcesz modyfikować daty.

  1. Możesz ją zapisać w meta-danych pliku:
    http://www.codeproject.com/Articles/16314/Access-the-Summary-Information-Property-Set-of-a-f
0
m_Lesiu napisał(a):

nigdy tego nie robiłem, ale gdzieś czytałem, że można niejako do aplikacji "wkompilować" plik np. tekstowy? resources chyba to się nazywało. Czy jest mozliwość wykorzystania tego mechanizmu to wykombinowania tego?

Już odpuściłem, ale drążę temat z ciekawości.

Można zaktualizować zasoby, ale również tylko dla pliku, do którego można aktualnie cokolwiek dopisać, czyli nie jest on aktualnie w użyciu. Przeanalizuj sobie kod ddołaczonego do tego posta modułu resource_strings.pas. Napisany kiedyś przeze mnie pod kątem użycia w aplikacji WinAPI i na bazie kodu z modułów w pakiecie madshiego. Dla nieużywanego exeka jeżeli nie jest spakowany - zadziała.

1 użytkowników online, w tym zalogowanych: 0, gości: 1