Avatar billede soerenlyn Nybegynder
30. juli 2007 - 17:30 Der er 20 kommentarer og
1 løsning

Tjekke om et objekt er mappe eller fil

Hej Eksperter.

Jeg har en side der skal slette en fil/mappe, og den modtager stien på filen/mappen med en querystring. Lige nu overfører jeg også en querystring der siger om det er en fil eller en mappe, så jeg kan vælge enten GetFile eller GetFolder.

Så tænker jeg om der er en kode så man ikke behøver at angive om det er en fil eller mappe, så jeg kan fjerne den querystring der angiver dette?
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:49 #1
Du kan bruge .FolderExists og .FileExists..

Check om mappen findes, hvis den ikke gør, check om filen findes..

Man kan nemlig ikke have BÅDE en mappe med navnet Windows OG en fil med navnet Windows, i samme mappe/rod..
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:52 #2
Eksempel:

dim obj
obj = ""

If FSO.FolderExists(server.MapPath(Folder)) Then
    obj = "mappe"
Else
    If (FSO.FileExists(server.MapPath(filespec))) Then
        obj = "mappe"
    Else
        obj = "FEJL! Hverken mappe eller fil"
    End If
End If

if obj = "mappe" then
    ' slet-mappe-kode her
else
    ' slet-fil-kode her
end if

Ved "else ... slet-fil-kode her" området burde man checke, om obj nu også var lig "fil".. :-)
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:53 #3
Great...

Rettelse:

dim obj, q
obj = ""

q = request.querystring("navn") ' erstat "navn" med navnet på din parameter i url'en

If FSO.FolderExists(server.MapPath(q)) Then
    obj = "mappe"
Else
    If (FSO.FileExists(server.MapPath(q))) Then
        obj = "mappe"
    Else
        obj = "FEJL! Hverken mappe eller fil"
    End If
End If

if obj = "mappe" then
    ' slet-mappe-kode her
else
    ' slet-fil-kode her
end if

Ved "else ... slet-fil-kode her" området burde man checke, om obj nu også var lig "fil".. :-)
Avatar billede thesurfer Nybegynder
30. juli 2007 - 17:54 #4
Aaaaarrrrgggghhhh! :-)

Rettelse.. IGEN! :-)

dim obj, q
obj = ""

q = request.querystring("navn") ' erstat "navn" med navnet på din parameter i url'en

If FSO.FolderExists(server.MapPath(q)) Then
    obj = "mappe"
Else
    If (FSO.FileExists(server.MapPath(q))) Then
        obj = "fil"
    Else
        obj = "FEJL! Hverken mappe eller fil"
    End If
End If

if obj = "mappe" then
    ' slet-mappe-kode her
else
    ' slet-fil-kode her
end if

Ved "else ... slet-fil-kode her" området burde man checke, om obj nu også var lig "fil".. :-)


jeg behøver vel ikke at fortælle dig, at jeg ikke har testet koden...... :-)
Avatar billede w13 Novice
30. juli 2007 - 18:01 #5
Rettelse: =)
-----------------------------------------
dim obj, q
obj = ""

q = request.querystring("navn") ' erstat "navn" med navnet på din parameter i url'en

If FSO.FolderExists(server.MapPath(q)) Then
    obj = "mappe"
Else
    If (FSO.FileExists(server.MapPath(q))) Then
        obj = "fil"
    Else
        obj = "FEJL! Hverken mappe eller fil"
    End If
End If

if obj = "mappe" then
    ' slet-mappe-kode her
else
    ' slet-fil-kode her
end if
------------------------------------------------
Den ene obj skulle sættes til fil.

I øvrigt er slettes både filer og foldere med eks. objFSO.Delete (altså ".delete") så du kan spare den sidste if-else, mr. Lyn
Avatar billede w13 Novice
30. juli 2007 - 18:02 #6
Jaeh, der var jeg lige for langsom :)
Avatar billede soerenlyn Nybegynder
30. juli 2007 - 18:38 #7
Jeg vidste godt man kunne gøre det sådan, men ejg synes det er en lang kode for sådan en lille ting. Derfor håbede jeg der var en direkte kode der var ligeglad om det er en fil eller en mappe.

Sådan en findes ikke?
Avatar billede thesurfer Nybegynder
30. juli 2007 - 18:51 #8
Du kunne måske checke på størrelsen af objektet, lige efter en On Error Resume Next

Eksempel:

On Error Resume Next
' check størrelse.. "crasher" hvis det er en mappe
slet filen '

If Err.Numer <> 0 then
' hvis fejlkoden ikke er lig 0, er det fordi objektet er en mappe, og ikke en fil..
End if

Jeg går ud fra, at en mappe ikke har en "størrelse", som en fil har..
Avatar billede thesurfer Nybegynder
30. juli 2007 - 18:53 #9
PS:

Med "On Error Resume Next" vil den fortsætte med koden, i stedet for at gå i stå..
Avatar billede w13 Novice
30. juli 2007 - 19:00 #10
Nå nej, getFile/getFolder er selvfølgelig ikke angivet endnu. Sådan her kan det vist klares med lidt færre linjer:
------------------------------------------
q=Server.MapPath(Request.Querystring("file"))
Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(q) Then
    objFSO.DeleteFolder(q)
ElseIf 0FSO.FileExists(q) Then
    objFSO.DeleteFile(q)
End If
Set objFSO=Nothing
Avatar billede w13 Novice
30. juli 2007 - 19:01 #11
Wups:

q=Server.MapPath(Request.Querystring("file"))
Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(q) Then
    objFSO.DeleteFolder(q)
ElseIf objFSO.FileExists(q) Then
    objFSO.DeleteFile(q)
End If
Set objFSO=Nothing
Avatar billede w13 Novice
30. juli 2007 - 19:08 #12
Og for at sikre, at skrivebeskyttede filer også slettes:
---------------------------------
q=Server.MapPath(Request.Querystring("file"))
Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(q) Then
    objFSO.DeleteFolder(q,True)
ElseIf objFSO.FileExists(q) Then
    objFSO.DeleteFile(q,True)
End If
Set objFSO=Nothing
Avatar billede thesurfer Nybegynder
30. juli 2007 - 19:10 #13
Man kunne vælg komprimere det til bare:

On Error Resume Next
Set objFSO=Server.CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder(q,True)
objFSO.DeleteFile(q,True)
Set objFSO=Nothing

:-)
Avatar billede soerenlyn Nybegynder
30. juli 2007 - 19:15 #14
Ja man kunne lave On Error Resume Next.
Men hvis nu man skal kunne gøre flere forskellige ting med mappen/filen, så er det lidt spild at skrive det både for file og for folder.

Kan man ikke i stedet for server.CreateObject("Scripting.FileSystemObject").GetFolder(...), så bare sige Get(...), eller noget i den retning?
Avatar billede thesurfer Nybegynder
30. juli 2007 - 19:18 #15
Jeg kan ikke lige se, hvor du er på vej hen med:

server.CreateObject("Scripting.FileSystemObject").GetFolder(...), så bare sige Get(...)

Jeg tror at du blander tingene sammen..

Nu har vi giver 2 gode løsninger.. Hvis de ikke er gode nok, har du forklaret problemet forkert..
Avatar billede soerenlyn Nybegynder
30. juli 2007 - 19:31 #16
Okay, så prøver jeg igen :)
Jeg modtager en path med en querystring.
Hvis objektet er en mappe ville jeg kunne sige:

  strPath = Request.Querystring("path")
  set objFSO = Server.CreateObject("Scripting.FileSystemObject").GetFolder(strPath)

Hvis det derimod var en fil skulle jeg sige:

  strPath = Request.Querystring("path")
  set objFSO = Server.CreateObject("Scripting.FileSystemObject").GetFile(strPath)

Fordi at det er to forskellige funktioner, GetFolder og GetFile, så overfører jeg en querystring der siger om det er en mappe eller fil så jeg ved hvilken jeg skal bruge.

Men jeg ville gerne have en funktion, der måske hed Get(), som virkede ligemeget om det er en mappe eller fil, så man ikke først behøvede tjekke hvad det var (som I begge har givet gode metoder til).
Derfor spørger jeg om der findes en funktion eller nogle funktioner sat sammen, så jeg ikke behøver tage højde for om det er en mappe eller fil, når jeg set'er objFSO....
Avatar billede w13 Novice
30. juli 2007 - 20:00 #17
Det kan du ikke. Det kunne være fedt.. Men det er jo ikke JavaScript detteher! :P
Avatar billede w13 Novice
30. juli 2007 - 20:02 #18
5 linjer er vist minimum for denne funktion!
Avatar billede soerenlyn Nybegynder
01. august 2007 - 23:46 #19
Jeg opnåede ikke det svar jeg ville have, men vil I dele point?
Avatar billede w13 Novice
01. august 2007 - 23:48 #20
Bare giv til thesurfer, han var først, og jeg rettede bare hans lidt.
Avatar billede thesurfer Nybegynder
02. august 2007 - 00:31 #21
Svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester