Pliki u?żywane przez inne programy

0
  1. Jak mogę usunąć plik, z którego korzysta inny program (nawet jeśli jest to Windows)??

  2. Jak sprawdzić który program korzysta z danego pliku?

0

Ad 1. Jeśli się nie mylę, to się nie da... Pod DOS'em można takie manewry wykonywać programami operującymi bezpośrednio dyskiem, ale ani Winda, ani Linux, ani żaden inny znany mi system operacyjny ci na to nie pozwoli.
Ad 2. Jaki to plik? Jakiś DLL? Czy jakiś plik z danymi, który jest aktualnie otwarty? Jeśli to jakaś dynamiczna część programu (DLL w wypadku Windy), to są programiki, które to mogą pokazać, za to w tym drugim przypadku, nie sądzę, by było to możliwe...
[dopisane do postu poniżej]
To chyba się nie da... (Podkreślam "chyba", może są na to jakieś metody, ale nie widziałem...)

0
  1. Chdzi mi o normalny plik z którego korzysta inny program (*.avi, *>bmp, *.txt, itp...)
0

Odpowiedź na pierwsze pytanie: nie da się. Jeśli jakiś proces blokuje dostęp do pliku, to plik można skasować dopiero po zabiciu tego procesu.
Co do drugiego pytania, to uff... ale się nagrzebałem... i wiem, że się da, aczkolwiek niekoniecznie zawsze (chociaż teoretycznie powinno się dać zawsze).
Jest sobie taki programik - Process Explorer (http://www.sysinternals.com), który wyświetla dane o procesie, między innymi dane o otwartych plikach. Wśród informacji są zawarte nazwy otwartych plików, albo chociaż ich katalogi.
Teraz bierzemy drugi program - Dependency Walker - i grzebiemy nim w tym pierwszym. Czego można się dowiedzieć? Ano, dostaniemy listę kilkudziesięciu funkcji biblioteki kernel32, z których któraś umożliwi na dorwanie się do nazwy obiektu otwartego za pomocą funkcji CreateFile, a inna na pobranie z procesu listy uchwytów do używanych obiektów (w tym i plików). Pozostaje tylko wsadzić w to trochę czasu na grzebaniu w helpie (Win32.hlp) i sprawdzaniu, co która funkcja robi. Mi cierpliwość już się skończyła, bo przysypiam. ;-(

Dlatego polecam: Process Explorer + Dependency Walker + Win32.hlp + F1, F1, F1... :|

//BTW - Adam, grunt to solidna podstawa i uziemienie

0

Wybaczcie, że się dopiszę, ale mam nieco pokrewny problem. Często, jak ściągnę jakiś film z kazy i go obejrzę, po czym zamknę odtwarzacz, to nie mogę usunąć, ani przenieść tego pliku, chociaż proces używający go, nie istnieje już. To samo jest po restarcie. Jedynym sposobem na usunięcie takiego pliku, jest uruchomienie windows commandera, zabicie procesu explorer.exe, usunięcie pliku w wc, po czym ponowne uruchomienie explorera. Sposób nie najpiękniejszy, tym bardziej, że gubią się wtedy niektóre ikonki z traya, itd. Można więc coiś z tym zrobić? Rozwiązanie może być zarówno "ręczne", jak i programowe.

// Dopisane
Dzieje się tak w przypadku Winows Media Playera oraz VPlayera, na innych nie sprawdzałem. Nie dzieje się to też zawsze. Może jest jakaś programowa możliwość zwolnienia pliku, jeśli inny program tego nie zrobił?

0

Hmm... A zastanawiałeś się nad użyciem innego odtwarzacza? Może używany przez ciebie otwiera plik, ale go nie zamyka, co powoduje niemożliwoś skasowania pliku. Wiem, że zamknięcie filmu podczas oglądania jest niemożliwe (niech mi ktoś znajdzie komputer, który załaduje cały film do pamięci operacyjnej), ale powinien być zamykany przy zamykaniu odtwarzacza. Może tego nie robi? Pierwsze co bym próbował, to odtwarzanie innym programem.

0

Często, jak ściągnę jakiś film z kazy i go obejrzę, po czym zamknę odtwarzacz, to nie mogę usunąć, ani przenieść tego pliku, chociaż proces używający go, nie istnieje już. To samo jest po restarcie.

Ale to bez sensu! :| :| :| Przecież wszystkie informacje o otwartych plikach zawarte są w strukturach procesów, to jeśli proces jest zamykany to wraz z nim powinny ginąć informacje o otwartych przez niego plikach (podobnie jak informacje o innych obiektach używanych przez proces)! A już na pewno nie ma prawa być tych informacji po restarcie!!! :| Bez sensu... ale jaki program M$ działa z sensem?... ;-(

Może używany przez ciebie otwiera plik, ale go nie zamyka, co powoduje niemożliwoś skasowania pliku.

Nie ma takiej opcji. Zamykasz proces - zamykasz wszsytkie otwarte przez niego pliki. To robi system operacyjny i nie masz na to wpływu. Podobnie robi z pamięcią, semaforami, muteksami i co tam jeszcze potrzebne było procesowi...

btw - mam kazę i vplayera, czasem kasuję ściągnięte filmy, i nie mam takiego błędu, nigdy zresztą nie miałem. co za windowsa masz?

0

Ja tylko w sprawie problemu z kazą:
Mówisz, że explorera musisz zabić, hę? Zatem sprawa jest prosta - nie zabijasz wszytskich procesów które korzystają z tego pliku. Najczęściej są to opendialogi pamiętające ustawienia folderu, lub pliku - program teoretycznie nie otwiera pliku, ale ma jego ścieżkę i to blokuje... hm.. jak tak myslę, co ja piszę, to to rzeczywiście dziwne, ale kiedyś tak miałem z winampem.

0

thenkles, to nie wina nai odtwarzacza, ani też kazy. to po prostu wina windowsa. wystarczy że po pojawieniu się dialogu ze plik nie do ruszenia jeszcze raz naciśnij delete. mi <ort>tsię </ort>tak właśnie ort!

0

na bank da sie to zrobic programami typu "file wipe". nawet jak jakis plik jest blokowany to mozna go spokojnie wyczyscic z dysku. zebym jeszcze wiedzial jak oni to robia...
sam z tego korzystalem bo filmy mi sie nie chcialy odblokowac nawet po restarcie systemu...

0

Nie wiem, czy problem jest związany z dialogami, bo ja te filmy otwieram raczej przez dwuklik. W każdym razie, mógłbym dostać jakiś link do takiego programiku?

0

zapomnialem skad to sciagnalem, wiec wpisz sobie na googlach "file wipe"...

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