30. juli 2007 - 17:30Der 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?
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".. :-)
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".. :-)
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...... :-)
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
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.
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
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
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
On Error Resume Next Set objFSO=Server.CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder(q,True) objFSO.DeleteFile(q,True) Set objFSO=Nothing
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?
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....
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.