Robię połączenie wielu plików tiff multi-image do pojedynczego pliku tiff wielu obrazów i mam problem z usunięciem plików źródłowych tiff, ponieważ klasa Image nadal trzyma na nich uchwyt.Używanie Image.FromFile nie zwalnia uchwytu pliku
Czytam obrazu TIFF przez Image.FromFile:
Bitmap resultTiff = (Bitmap) Image.FromFile(strImageFile);
Po czym czytam pozostałe zdjęcia TIFF w taki sam sposób i dołączyć je do wynikowego obrazu TIFF.
Kiedy skończę używam tego kodu, aby zwolnić referencje i zapisać plik wynikowy:
ep.Param[0] = new EncoderParameter(enc, (long) EncoderValue.Flush);
resultTiff.SaveAdd(ep);
resultTiff.Dispose();
Teraz problem jest, że uchwyt na plikach nadal istnieje (a więc pliki mogą nie zostać usunięte) chyba że zadzwonię do GC.Collect()
po wywołaniu resultTiff.Dispose()
.
Możesz sobie wyobrazić, że nie czuję się komfortowo, dzwoniąc do GC, więc czy istnieje inny sposób osiągnięcia tego?
+1 za tę odpowiedź. 'Image.FromFile' nie zawsze robi dokładnie to, co należy. Zastąpienie go ręcznym otwarciem strumienia pliku, a następnie załadowanie mapy bitowej stamtąd zapewnia większą elastyczność. – stakx
Z jakiegoś powodu "FileStream" wciąż dawał mi ten sam problem. Zamiast tego użyłem 'Image.FromStream (new MemoryStream (File.ReadAllBytes (path))), który działał dobrze. – William