Toon posts:

[ASP.NET] FileInfo.delete() -> System.IO.IOException

Pagina: 1
Acties:
  • 512 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer een naar een temp folder geupload plaatje te verwijderen, maar krijg geen toegang meer tot het bestand?!
error:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
The process cannot access the file "c:\Begeer Develop\Fase 2
\admin\images\temp\Stapelswerk......jpg" because it is being used by another process. 
Description: An unhandled exception occurred during the execution of the current 
web request. Please review the stack trace for more information about the error 
and where it originated in the code. 

Exception Details: System.IO.IOException: The process cannot access the 
file "c:\Begeer Develop\Fase 2\admin\images\temp\Stapelswerk......jpg" because it 
is being used by another process.

Source Error: 

Line 306:           dim mobjFileInfo As FileInfo
Line 307:           mobjFileInfo = New FileInfo(adminTmp_path & 
td_afbeelding_naam.Text)
Line 308:           mobjFileInfo.delete()
Line 309:           'Leeg het hidden textfield ivm backbutton probs
Line 310:           td_afbeelding_naam.Text = ""


Dit is mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
sub resize( insert_id as Integer )
    if td_afbeelding_naam.Text <> "" then
        ' create an Image object and load the image
        Dim objImage as System.Drawing.Image = 
System.Drawing.Image.FromFile( adminTmp_path & td_afbeelding_naam.Text )
        objImage.Save(choosen_path & insert_id &"large.jpg", 
ImageFormat.jpeg)

        
        ' get a Thumbnail image from the above image....width is approx 120px
        dim factor as double =  120 / objImage.width
        dim width as Integer = objImage.width * factor
        dim height as Integer = objImage.height * factor
        
        Dim objSourceBitmap As Drawing.Bitmap = New Bitmap
(adminTmp_path & td_afbeelding_naam.Text)
        
        Dim objTargetBitmap As Drawing.Bitmap = New Bitmap(width, height)
        Dim objGraphics As Drawing.Graphics = Graphics.FromImage
(objTargetBitmap)
        objGraphics.InterpolationMode = 
Drawing2D.InterpolationMode.HighQualityBicubic
        Dim recCompression As Rectangle = New Rectangle(0, 0, width, height)
        objGraphics.DrawImage(objSourceBitmap, recCompression)
        objTargetBitmap.Save(choosen_path & insert_id &"small.jpg", ImageFormat.Jpeg)
        
        ' dispose of the images
        objImage.Dispose()
        objSourceBitmap.Dispose()
        objTargetBitmap.Dispose()
        objGraphics.Dispose()
        
        ' clean up.
        objImage = Nothing
        objSourceBitmap = Nothing
        objTargetBitmap = Nothing
        objGraphics = Nothing
        
        'zet naam in tmp var
        dim afbeelding as string = td_afbeelding_naam.Text
        
        'Leeg het hidden textfield ivm backbutton probs
        td_afbeelding_naam.Text = ""
        td_plaatje.controls.clear()
        
        closeFile( adminTmp_path & afbeelding )
        
        'verwijder eerder upgeloade afbeelding
    ->  dim mobjFileInfo As FileInfo
    ->  mobjFileInfo = New FileInfo(adminTmp_path & afbeelding )
    ->  mobjFileInfo.delete()
    end if
end sub

function closeFile( FullPath as string )
    while(true)
        try
            Dim fs As New FileStream(FullPath, FileMode.Append 
FileAccess.Write, FileShare.None)
            'FileStream fs = new FileStream(FullPath,
FileMode.Append, FileAccess.Write, FileShare.None
            fs.Close()
            exit try
        catch
            Thread.Sleep(1000)
        end try
    end while
end function


De functie closeFile heb ik er zelf bij gemaakt, maar daar loopt ie nu helemaal op stuk (neverending loop). Ik heb deze code gevonden op dotnet247.

Waarom mag ik het plaatje niet meer verwijderen?
Ik heb toch netjes alles gesloten, disposed ed?

De plek van de error is aangegeven met -> :)

[ Voor 4% gewijzigd door Verwijderd op 26-06-2003 10:50 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
De user ASPNET voldoende rechten geven op die folder should do the trick.

Logisch toch? Een webapplicatie wordt uitgevoerd door de user IUSR_computernaam of ASPNET account. Die accounts zijn redelijk restricted. Je wilt namelijk niet dat gelijk wie op jouw server kan klooien.
Als je echt zeker bent dat een gebruiker van jouw site aan die directory mag, dan kan je daar de nodige rechten aan toekennen).

Trouwens, het is niet nodig om zo'n lap irrelevante code te posten.

[ Voor 74% gewijzigd door whoami op 26-06-2003 10:52 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nee, volgens mij niet whoami.
Dan krijg je permission denied, die error heb ik al eerder gehad.
Nu geeft ie aan dat de file "in use is".
(check het alsnog even)

[ Voor 13% gewijzigd door Verwijderd op 26-06-2003 10:52 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Je moet niet disposen, maar closen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
De users System en ASPNET hebben alleen write rechten op de map, dit is toch voldoende?
Okee ga close proberen :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Zolang je je files niet closed, zijn ze in use. (Logisch eigenlijk).
Disposen van een object zorgt er niet noodzakelijk voor dat alles goed afgesloten wordt, tenzij het in de destructor van dat object wordt opgenomen.
Als dat wel zo is (code in de destructor zorgt voor het netjes afsluiten en opruimen), dan weet je afaik nog altijd niet wanneer dat object echt 'gedisposed' zal worden, aangezien de Garbage collector dat allemaal gaat doen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik kan de image niet closen?
code:
1
Compiler Error Message: BC30456: 'Close' is not a member of 'System.Drawing.Image'.


Er zit ook geen close in de System.Drawing.Image

Dit staat er bij dispose op MSDN:
Calling Dispose allows the resources used by this Image object to be reallocated for other purposes.

Zegt idd niets over het daadwerkelijk sluiten van de file...

Hoe kan ik een bestand closen? Moet dat dan met een fileStream?

Verwijderd

Topicstarter
Ik heb nu dit stukje code toegevoegd:
code:
1
2
3
4
Dim MyFile As IO.StreamWriter
MyFile = New System.IO.StreamWriter(adminTmp_path & afbeelding, True) ' True for appending
MyFile.flush()
MyFile.Close() ' Close file


En nu geeft hij bij de streamWriter al de error? :?
code:
1
The process cannot access the file "c:\Begeer Develop\Fase 2\admin\images\temp\Stapelswerk......jpg" because it is being used by another process.

Verwijderd

Topicstarter
De user ASPNET voldoende rechten geven op die folder should do the trick.

Logisch toch? Een webapplicatie wordt uitgevoerd door de user IUSR_computernaam of ASPNET account. Die accounts zijn redelijk restricted. Je wilt namelijk niet dat gelijk wie op jouw server kan klooien.
Als je echt zeker bent dat een gebruiker van jouw site aan die directory mag, dan kan je daar de nodige rechten aan toekennen).
Als ik ASPNET full control geef werkt het ook niet?
Heb nu de user SYSTEM alles behalve fullcontrol gegeven en ASPNET lezen+schrijven, dan werkt het wel.
Zit er een risico aan deze instelling? Kan de iemand nu de temp folder misbruiken?
Trouwens, het is niet nodig om zo'n lap irrelevante code te posten.
:? Normaal loopt iedereen te zeuren om de volledige code, post ik een keer wat ik gebruik & waar het mis gaat, is het ook niet goed! :?
modbreak: 3 keer op een rij binnen anderhalf uur in je eigen topic posten zoals IceFlame hier doet wordt gezien als kicken, wat we niet toestaan binnen 24 uur. Leer die edit-knop te gebruiken als je wat toe te voegen hebt
OMFG!?! :?
Ik post 3x iets anders, wat niet met de voorgaande post te maken heeft (okee onderwerp is hetzelfde, maar het zijn allemaal probeersels)
Heb ik iets loos/irrelevants gepost in deze laatste 3 posts? iets wat op een kick lijkt?!
Ik ben gewoon druk bezig met het vinden van een goede oplossing en post mijn voortgang/verder tegengekome problemen... :?

Naja... zal ut niet meer doen, maak er wel een uber lange post van ofzo

[ Voor 28% gewijzigd door Verwijderd op 26-06-2003 12:59 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

modbreak: 3 keer op een rij binnen anderhalf uur in je eigen topic posten zoals IceFlame hier doet wordt gezien als kicken, wat we niet toestaan binnen 24 uur. Leer die edit-knop te gebruiken als je wat toe te voegen hebt

Professionele website nodig?

Pagina: 1