zakończenie używania pliku przez proces przy zgrywaniu na serwer(zerwać połączenie z plikiem)

0

Problem mam następujący

  1. zgrywam sobie plik graficzny na serwer
  2. robię z niego miniaturkę
  3. i chcę usunąć oryginalny plik, jednak przy próbie usunięcia go z serwera
    File.Delete(SciezkaDoPlikuNaSerwerze);
    otrzymuję komunikat nie można go usunąć bo jest używany przez inny proces. Jak ten plik skutecznie usunąć ? Doczytałem na forum że można to zrobić dzięki Dispose ale nie potrafię dopasować tego polecenia do sytuacji.
2

daj kawalek kodu ktory zgrywa ten plik, inaczej pewnie sie nie dogadamy. najprawdopodobniej musisz zwolnic uchwyt do pliku, poczytaj do czego sluzy interfejs IDisposable i klauzula using

0

@klimba Możesz zawsze swobodnie pytać jaka jest pogoda za oknem. W pozostałych przypadkach zamieszczaj kod.

0
if(FileUpload1.HasFile)
            {
                string plikNazwa = FileUpload1.FileName;
                string plikRozszerzenie = Path.GetExtension(plikNazwa);
                plikRozszerzenie = plikRozszerzenie.ToLower();

                if (!(plikRozszerzenie == ".jpg" || plikRozszerzenie == ".jpeg" || plikRozszerzenie == ".jpe" ||
                plikRozszerzenie == ".gif" || plikRozszerzenie == ".bmp"))
                {
                    Label1.Text += "Plik nie ma rozszerzenia wskazującego na plik graficzny (JPEG, GIF, BMP). Plik nie został przesłany.";
                    return;
                }

                string plikSciezkaDoPliku = Path.Combine(plikSciezkaDoKatalogu, plikNazwa);
                string plikSciezkaDoPlikuNaSerwerze = Server.MapPath(plikSciezkaDoPliku);
                try 
                {
                    FileUpload1.SaveAs(plikSciezkaDoPlikuNaSerwerze);
                    File.Delete(plikSciezkaDoPlikuNaSerwerze);
                }
                catch
                {
                    Label1.Text += "Błąd podczas przesyłania.";
                }
            } 
0

OK znalazłem rozwiązanie

rzeczywiście trzeba było wgrać cały kod

otóż do tworzenia miniaturek służyła mi procedura "tworzMiniaturę" gdzie na początku tworzyłem objekt

Bitmap imageOryginal = new Bitmap(fileNameOryginalFile);
 

który później służył mi do tworzenia miniaturki i dla tego obiektu należało dodać "Dispose"

rozwiązanie:
wystarczyło na końcu procedury które tworzy miniaturkę dodać komendę
imageOryginal.Dispose();

i wszystko działa prawidłowo

jednak w dalszym ciągu zastanawiam się czy to najlepszy pomysł, żeby zgrywać oryginalny plik na serwer i tworzyć z niego miniaturkę i później go usuwać czy może jest sposób stworzenia miniatury po stronie klienta i ściągnięcie tylko miniaturki na serwer ? Od razu mówię, że szukałem ale wszystkie opisy które znalazłem opisują ten pierwszy sposób.

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