Błąd zapisu plików z pliku zasobów.

Odpowiedz Nowy wątek
2011-06-16 18:45
delphi_maker
0

Słuchajcie mam taki problem, że ładuję do pliku *.res różne pliki i później program ma je zapisywać na dysk w odpowiednie miejsce. Używam takiego kodu:

var
  Res: TResourceStream;
begin
  ...
  Res := TResourceStream.Create(hInstance, 'file_1', RT_RCDATA);
  Res.SaveToFile(Dir + 'file1.dat');
  Res.Free;
  Res := TResourceStream.Create(hInstance, 'file_2', RT_RCDATA);
  Res.SaveToFile(Dir + 'file2.dat');
  Res.Free;
  ...

I tak kilkanaście plików. Akurat na moim komputerze nie miałem takiego przypadku, ale niektórzy mi mówili, że przy próbie ponownego uruchomienia programu i wypakowaniu wyskakuje error. Nie wiecie czym to może być spowodowane? Dodatkowo przy kolejnej próbie wypakowania pliku w inne miejsce problem czasami nie występuje już, ale tylko czasami. Nie wiem dokładnie jaki błąd, ponieważ mam ujęty cały ten kod w try - except. Musiałbym to przerobić normalnie i potem ktoś by musiał zrobić screen błędu. Ale ogólnie co o tym sądzicie? Dodatkowo program wymusza tryb admina na Viscie i 7-ce.

Pozostało 580 znaków

2011-06-16 18:48
0

Tryb admina pewnie po to, bo program nie ma uprawnień do wklejania plików gdzieś na dysku.
A może zamiast jednej zmiennej wczytuj zasoby strumienie do tablicy, a potem zapisuj? Kod byłby czytelniejszy, a co ważniejsze takiej samej długości, zawsze... nawet gdybyś miał 1000 plików do wklejenia.


Pozostało 580 znaków

2011-06-16 18:52
delphi_maker
0

W sensie do tablicy typu TResourceStream? Spróbuję. :)

Pozostało 580 znaków

2011-06-16 18:54
0

Tak, a przy próbie ponownego uruchomienia i wypakowania może być błąd przez to że program próbuje utworzyć plik który jest już utworzony (2 razy wkleja ten file1.dat).


Pozostało 580 znaków

2011-06-16 18:57
delphi_maker
0

No niestety nie ma możliwości. Jest sprawdzanie wcześniej czy te pliki istnieją. Ale na razie spróbuje tamtego ;).

Pozostało 580 znaków

2011-06-16 20:45
Opi
3
delphi_maker napisał(a)

przy próbie ponownego uruchomienia programu i wypakowaniu wyskakuje error

Jeśli wyskakuje error, to musisz uruchamiać program dotąd, aż przestanie wyskakiwać.

Pozostało 580 znaków

2011-06-16 21:31
delphi_maker
0

Źle mnie zrozumiałeś. Program się uruchamia, a to "wypakowywanie" uruchamia się przyciskiem i wtedy im wywala błąd.

Pozostało 580 znaków

2011-06-16 21:43
0

Zgaduj zgadula.... powodem takiego zachowania może być np. to, że wypakowane po raz pierwszy pliki są używane przez jakiś inny program (lub przez siebie same, jeśli "różne pliki" oznacza np. programy), co nie pozwala na ich nadpisanie.


Pozostało 580 znaków

2011-06-16 21:54
delphi_maker
0

Co rozumiesz pod pojęciem, że pliki mogą używać same siebie? To są zwykłe pliki typu *.dat, żadne pliki wykonywalne.

Pozostało 580 znaków

2011-06-16 21:59
0

"jeśli "różne pliki" oznacza np. programy", a skoro to nie programy, to same siebie w takim razie nie użyją :)

Więc zostaje szukać co je używa...


...na pewnie nie chodzi o to że program nie ma uprawnień do utworzenia pliku? - TomRiddle 2011-06-17 11:47
"ale niektórzy mi mówili, że przy próbie ponownego uruchomienia programu" - z pierwszego postu - skoro raz mu się udało zapisać, to wynikałoby z tego, że takie uprawnienia ma. Dopiero kolejna próba powoduje błąd... - madmike 2011-06-17 13:53

Pozostało 580 znaków

2011-07-01 12:12
delphi_maker
0

Niestety przerobienie na tablice nic nie dało. Zrobiłem obsługę wyjątku i dostaje komunikat:

"Cannot create file '...tutaj ścieżka...'. Odmowa dostępu 0"

W momencie wystąpienia błędu plik podany w ścieżce nie istnieje, folder nie ma uprawnień tylko do odczytu, a program uruchamiany jest w trybie administratora...

Macie jakieś pomysły jeszcze?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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