[Delphi] Bardzo głupi problem z TFileStream i fmOpenRead

0

Pisałem i teraz "przepisuję" od nowa program do kopiowania plików (na wzór TotalCopy) i zawsze mi się wysypuje na:

kopiujZFile:=TFileStream.Create(listaPlikowWe[i],fmOpenRead);

kopiujZFile:TFileStream;
listaPlikowWe:array of string;

Nie wiem co moze byc źle - taki prosty kodzik, a nie chce w ogóle działać. Ktoś wie dlaczego. Korzystam z Delphi 7. Pozdro 4 All;

0

A może podałbyś komunikat błędu? Czy uważasz innych za jasnowidzów?

0

Pewnie Access Violation :] Tak sie zdarza pokombinuj z dostępem do pliku. Czasem prosta zmiana w tym względzie umożliwia jego otwarcie :P

0

A może podałbyś komunikat błędu? Czy uważasz innych za jasnowidzów?

Tak jak napisał Viking chodzi o ukochany błąd Access Violation, który o ile mnie google nie myli: program odwołuje się do czegoś co nie istnieje (ogólnie). Do Szymek: Nie uważam innych za jasnowidzów ale myslałem, że to oczywiste, ale jeśli ci to bardzo przeszkadza to przepraszam.

pokombinuj z dostępem do pliku.

Z czym tu kombinować: "Użyć fmOpenRead czy fmOpenReadWrite, oto jest pytanie"...Żartuje oczywiście, ale nie kompletnie nie wiem dlaczego nie działa, wszystkie obiekty napewną istnieją (moge dac za to coś uciąć...kabel od klawiatury :P ).
Najdziwniejsze w tym wszystkim jest to, że jeśli utworzę "ręcznie" plik docelowy to wtedy działa, ale co ma plik źródłowy do docelowego, przeciez kopiujZFile to stream dla pliku źródłowego. [CIACH!] z powikłaniami może wziąc z tym Delphi....

0

To wklej więcej kodu... :/
Przy otwieraniu docelowego daj fmCreate

0

Oto kod:

ShowMessage('przed'); //dzięki emu wiem że mi się wysypuje na następnej linijce
kopiujZFile:=TFileStream.Create(GetCorrectPath(listaPlikowWe[i]),fmOpenRead);
ShowMessage('w trakcie'); 
kopiujDoFile:=TFileStream.Create(GetCorrectPath(kopiujDoStr+'\'+listaPlikowWy[i]),fmCreate);
ShowMessage('po');

Za pomocą tych ShowMessage'ów sprawdzałem gdzie dokładnie sie wysypuje.

Funkcja GetCorrectPath to taki mój bajer wywalający ze ścieżki nadmiarowe znaki "\" i poprawiający ściezki podobnie jak ExpandUNCFileName. Nie ma na pewno błędu w tej funkcji bo jeśli kod wygląda tak:

ShowMessage('przed');
kopiujZFile:=TFileStream.Create(listaPlikowWe[i],fmOpenRead);
ShowMessage('w trakcie'); 
kopiujDoFile:=TFileStream.Create(kopiujDoStr+'\'+listaPlikowWy[i],fmCreate);
ShowMessage('po');

to też pokazuję sie Access Violation.

0

GetCorrectPath(listaPlikowWe[i]) zamiast tego wsadz byle jaką nazwe pliku, być może i jest za duże w stosunku do rozmiarów tablicy.

0

Sorki że nie na temat ale używaj debugera zamiast ShowMessage ;-)

0

GetCorrectPath(listaPlikowWe[i]) zamiast tego wsadz byle jaką nazwe pliku, być może i jest za duże w stosunku do rozmiarów tablicy.

i na pewno nie jest za duże ponieważ:
po pierwsze: na początku wynosi 0 i program wysypuje sie już przy pierwszym pliku,
po drugie: kiedy sprawdzam wartosc zmiennej listaPlikowWe[i] to wyswietla mi poprawną ścieżke za kazdym razem.

używaj debugera zamiast ShowMessage ;-)

Zawsze używam debugera tylko jakoś teraz wyłączyłem opcję debugowania i nie chciało mi się znowu jej włączyć, więc dałem te ShowMessage na szybkiego, ale debuger jest zdecydowanie lepszy.

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