Avatar billede mosmensk Nybegynder
13. januar 2004 - 23:46 Der er 9 kommentarer og
1 løsning

List og opret filer fra mappe i DB

Hejsa.

Jeg har en masse filer som jeg gerne vil have listet i en database. Der er tale om ca. 4000 filer, så det ville jeg nødig gøre manuelt :)

Jeg fandt noget kode her på eksperten som fint lister filer fra en mappe alfabetisk:

<%
strPath = Server.MapPath(".")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)
set f = Server.CreateObject("Scripting.Dictionary")
For Each objFile In objFolder.Files
  f.add objFile.Name,1
Next

a = f.keys()
for i=ubound(a)-1 to lbound(a) step -1
  for j=0 to i
    if a(j)>a(j+1) then tmp=a(j):a(j)=a(j+1):a(j+1)=tmp
  next
next
for i=lbound(a) to ubound(a)
  response.write a(i) & "<br>"
next

%>

men jeg ønsker at oprette listen i en database, hvor hver fil får navn, filetype og størelse. Jeg ved er ingen haj til asp så jeg ved ikke om dette er for meget at forlange.

På forhånd tak!
Avatar billede deeflate Nybegynder
14. januar 2004 - 00:19 #1
Prøv dette:

<%

If request.Querystring("dir") <> "" Then
  dir = "/" & request.Querystring("dir")
else
  dir = "/"
End if

Dim myFso
Set myFso = Server.CreateObject("Scripting.FileSystemObject")

Dim myFolder
Set myFolder = myFso.GetFolder(Server.MapPath(dir))

Dim files
Set files = myFolder.Files

Set rs = Server.CreateObject("ADODB.RecordSet")
Set Conn = Server.CreateObject("ADODB.Connection")
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")
Conn.Open strDSN

strSQL = "SELECT * FROM filer"

rs.open strSQL, conn, 2, 2


For Each file in files
    rs.addNew
    rs("filnavn") = file.Name
    rs("filtype") = file.Type
    rs("filstorrelse") = file.Size
Next

rs.update

rs.Close
set rs = nothing
Conn.close
set Conn = nothing
Set files = Nothing
Set subFolders = Nothing
Set myFolder = Nothing
Set myFso = Nothing

%>
Avatar billede deeflate Nybegynder
14. januar 2004 - 00:28 #2
Det skal naturligvis lige rettes til.

Jeg har leget, at der er en database ved navn database.mdb.
I denne database er en tabel, ved navn filer, som indeholder felterne id (autonummerering) (fordi et id felt altid er godt at have), filnavn (tekst), filtype (tekst) og filstorrelse (tal).

Det vil måske være en fordel at tilføje et

response.Write "filerne er nu tilføjet i databasen"

nederst i scriptet, så du kan se, at den har gjort noget.

Det sidste du lige skal være opmærksom på er, at der tilføjes en ny record for hvert loop.
Det vil sige, at hvis du kører scriptet to gange bliver filerne ikke overskrevet, men derimod tilføjet igen.
Det kan der dog gøres noget ved, hvis det skulle være nødvendigt.
Avatar billede mosmensk Nybegynder
14. januar 2004 - 00:33 #3
tak det virker smukt!

Ja du må gerne rette det så den altid overskriver.
Avatar billede deeflate Nybegynder
14. januar 2004 - 00:42 #4
Værsågod.
Nu overskriver den, hvis der findes en fil med samme filnavn i db'en, og hvis ikke, så opretter den en ny post.

<%

If request.Querystring("dir") <> "" Then
  dir = "/" & request.Querystring("dir")
else
  dir = "/"
End if

Dim myFso
Set myFso = Server.CreateObject("Scripting.FileSystemObject")

Dim myFolder
Set myFolder = myFso.GetFolder(Server.MapPath(dir))

Dim files
Set files = myFolder.Files

Set rs = Server.CreateObject("ADODB.RecordSet")
Set Conn = Server.CreateObject("ADODB.Connection")
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb")
Conn.Open strDSN

For Each file in files
strSQL = "SELECT * FROM filer WHERE filnavn = '" & file.name & "'"
rs.open strSQL, conn, 2, 2
If (rs.eof or rs.bof) then
    rs.addNew
end if
    rs("filnavn") = file.Name
    rs("filtype") = file.Type
    rs("filstorrelse") = file.Size
rs.update
rs.Close
Next

response.Write "Databasen er nu opdateret"

set rs = nothing
Conn.close
set Conn = nothing
Set files = Nothing
Set subFolders = Nothing
Set myFolder = Nothing
Set myFso = Nothing

%>
Avatar billede mosmensk Nybegynder
14. januar 2004 - 00:50 #5
hmm...nu får jeg denne fejl:

Microsoft JET Database Engine (0x80040E09)
Databasen eller objektet er skrivebeskyttet og kan ikke opdateres.
/c64mos/games/update.asp, line 37

sært, det virkede før. Sikker IIS problemer :/
Avatar billede deeflate Nybegynder
14. januar 2004 - 00:55 #6
Prøv at højreklik på din database og gå i properties.
Hvis read-only er slået til, så slå den fra.
Det burde det naturligvis ikke være, når du nu lige har brugt den, men mærkeligere ting er sket, så måske...
Avatar billede mosmensk Nybegynder
14. januar 2004 - 00:58 #7
Det er fikset...lige et sidst spørgsmål...jeg har asp filen liggende i /c64 og filerne liggende i /c64/games/

Skal det så ikke se sådan ud:

If request.Querystring("dir") <> "" Then
  dir = "/games" & request.Querystring("dir")
else
  dir = "/games"
End if

?

Jeg får nemlig denne fejl:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A004C)
Stien blev ikke fundet
/c64mos/update.asp, line 23
Avatar billede mosmensk Nybegynder
14. januar 2004 - 01:03 #8
ah det skulle være "./games"..

Tak skal du ha...dette er en luksus :)
Avatar billede deeflate Nybegynder
14. januar 2004 - 01:03 #9
Prøv

If request.Querystring("dir") <> "" Then
  dir = "games/" & request.Querystring("dir")
else
  dir = "games/"
End if

eller

det kan også være din sti skal gå ud fra roden.

Hvis du altid anvender den samme mappe, kan du også nøjes med:

  dir = "games/"

Det andet er kun hvis man vil kunne skifte mappe.


Jeg går i seng nu, men vender tilbage imorgen.
Prøv at lege lidt med stierne, så skal du nok finde ud af det.
Avatar billede deeflate Nybegynder
14. januar 2004 - 01:04 #10
OK :)
Og velbekomme :)
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