Avatar billede bobbedude Nybegynder
19. juli 2002 - 08:16 Der er 31 kommentarer og
1 løsning

Eksister filen i folder ?

Her mit script:

<%
set connect = server.createobject("ADODB.Connection")
Connect.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("../db/images.mdb")

'Skriv her dir, f.eks:
dir = ".\"

x = Request.ServerVariables("PATH_INFO")
pos = InStrRev(x, "/")
stien = Left(x, pos)

Set fso = Server.CreateObject("Scripting.FileSystemObject")
set folder = fso.Getfolder(Server.Mappath(dir))
set files = folder.files

for each f in files
        temp = instr(f.name,".\")
       
        If Right(lcase(f.name),4) = ".jpg" Then
       
Set rs = Connect.Execute("SELECT * FROM billeder WHERE filnavn = '" & f.name & "'")
if rs.eof then
'Billedet er ikke i databasen

    SQL = "insert into billeder (billeddir,filnavn) Values('"&stien&"','"&f.name&"')"
    Connect.Execute(SQL)

' Billedet er i databasen  så vi springer det over         
else     
       
        Response.write "Billedet "&f.name&" er i databasen<br>"
       
            end if
           
        end if
   
next

set files = nothing
set fso = nothing
rs.close
%>


Den kikker om de filer der er i mappen også er skrevet ind i databasen, hvis de ikke er skriver den dem ind i den og det virker fint nok.

Men jeg ville gerne have at hvis der stod navnet på en fil i databasen som ikke eksisterede i mappen at denne post så blev slettet fra databasen.
Avatar billede bobbedude Nybegynder
19. juli 2002 - 09:40 #1
Jeg har fundet dette stykke kode som jeg kan checke om en fil eksister i mappen via FSO men den skal vel lave et loop så der bliver mod de filer der er i databasen, men hvordan:

  Set FSO = CreateObject("Scripting.FileSystemObject")
  If (Not FSO.FileExists(rs("filnavn"))) Then
    Response.write"Filen er ikke her"
  End If
Avatar billede ras2000 Nybegynder
19. juli 2002 - 10:01 #2
En langsom metode ville være
 
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Do while not rs.eof
  If (Not FSO.FileExists(rs("filnavn"))) Then
    Response.write"Filen er ikke her"
  End If
  rs.movenext
  loop
Hver gang du kommer til en fil der ikke er der kan du jo slette den fra databasen. sql = delete from tabelnavn where filnavn = '"&filnavn&"';"
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:05 #3
Jeg vill gøre det sådan:

Set rs = Connect.Execute("SELECT * FROM billeder WHERE filnavn = '" & f.name & "'")
if rs.eof then
'Billedet er ikke i databasen

    SQL = "insert into billeder (billeddir,filnavn) Values('"&stien&"','"&f.name&"')"
    Connect.Execute(SQL)

' Billedet er i databasen  så vi checker om det er fysisk i mappen         
else     

    If FSO.FileExists(Server.MapPath ("e:/dir/"&stien&"/"&rs("filnavn")&")) Then
        response.write "OK"
    Else
        response.write "NOT"
    End If




       
        Response.write "Billedet "&f.name&" er i databasen<br>"
       
            end if
           
        end if
   
next



men jeg får fejlen:


/dir/tester/test.asp, line 31

If FSO.FileExists(Server.MapPath("e:/rc-internet/"&stien&"/"&rs("filnavn")&") Then

Er denne måde hurtiger end din ?
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:06 #4
Jeg skal bruge den fulde sti ellers virker det ikke
Avatar billede ras2000 Nybegynder
19. juli 2002 - 10:13 #5
Ja, men du går jo ikke alle posterne igennem, det troede jeg du ville. Jeg tror ikke du skal have server.Mappath om din sti, du har jo givet den hårde sti.
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:15 #6
arrg det kan jeg jo god se ikke holder.

den vil jo aldrig komme ind i else hvis filen ikke findes fysisk.
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:22 #7
Hmm nu ved jeg ikke hvad der er galt
http://www.rc-internet.com/mediebank/tester/test.asp

scriptet:

<%
set connect = server.createobject("ADODB.Connection")
Connect.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("../db/images.mdb")

'Skriv her dir, f.eks:
dir = ".\"

x = Request.ServerVariables("PATH_INFO")
pos = InStrRev(x, "/")
stien = Left(x, pos)

Set fso = Server.CreateObject("Scripting.FileSystemObject")
set folder = fso.Getfolder(Server.Mappath(dir))
set files = folder.files

for each f in files
        temp = instr(f.name,".\")
       
        If Right(lcase(f.name),4) = ".jpg" Then
       
Set rs = Connect.Execute("SELECT * FROM billeder WHERE filnavn = '" & f.name & "'")
if rs.eof then
'Billedet er ikke i databasen

    SQL = "insert into billeder (billeddir,filnavn) Values('"&stien&"','"&f.name&"')"
    Connect.Execute(SQL)

' Billedet er i databasen  så vi viser lige listen         
else     
       
        Response.write "Billedet "&f.name&" er i databasen<br>"
       
        end if
           
        end if
   
next


Do while not rs.eof
  If (Not FSO.FileExists(rs("filnavn"))) Then
    Response.write"Filen "&rs("filnavn")
  End If
  rs.movenext
  loop

set files = nothing
set fso = nothing
rs.close


%>

Alle billeder er i databasen
Avatar billede ras2000 Nybegynder
19. juli 2002 - 10:33 #8
Du mener den ikke skulle komme med Filen 013.jpg til sidst?
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:39 #9
ja hvis jeg sletter 013.jpg så skriver den 012.jpg i den løkke du gav mig
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:44 #10
Altså den skriver kun navnet på den sidste post i databasen i din løkke også selv om jeg evt sletter 010.jpg og 011.jpg.
Var det ikke meningen at den skulle skrive navnet på de filer der var i databasen men ikke fysisk på disken ?
Avatar billede bobbedude Nybegynder
19. juli 2002 - 10:47 #11
æv er jeg alene ?
Avatar billede ras2000 Nybegynder
19. juli 2002 - 10:58 #12
Nejnej, jeg kigger på det, men jeg har også lige gang i noget andet.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 11:13 #13
Du skal lave en anden rs. En der tager alle dine poster i databasen. Noget ala :
<%
set connect = server.createobject("ADODB.Connection")
Connect.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("../db/images.mdb")

'Skriv her dir, f.eks:
dir = ".\"

x = Request.ServerVariables("PATH_INFO")
pos = InStrRev(x, "/")
stien = Left(x, pos)

Set fso = Server.CreateObject("Scripting.FileSystemObject")
set folder = fso.Getfolder(Server.Mappath(dir))
set files = folder.files

for each f in files
        temp = instr(f.name,".\")
       
        If Right(lcase(f.name),4) = ".jpg" Then
       
Set rs = Connect.Execute("SELECT * FROM billeder WHERE filnavn = '" & f.name & "'")
if rs.eof then
'Billedet er ikke i databasen

    SQL = "insert into billeder (billeddir,filnavn) Values('"&stien&"','"&f.name&"')"
    Connect.Execute(SQL)

' Billedet er i databasen  så vi viser lige listen         
else     
       
        Response.write "Billedet "&f.name&" er i databasen<br>"
       
        end if
           
        end if
   
next

Set rs = Connect.Execute("SELECT * FROM billeder;")

Do while not rs.eof
  If (Not FSO.FileExists(rs("filnavn"))) Then
    Response.write "Filen " & rs("filnavn") & " er ikke i mappen, her skal du sætte den slet linie ind"
  End If
  rs.movenext
loop

set files = nothing
set fso = nothing
rs.close


%>
Avatar billede bobbedude Nybegynder
19. juli 2002 - 11:28 #14
nu skriver den at alle filer ikke er der??
jeg tror det er fordi den skal have den fulde sti.

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=78
Avatar billede ras2000 Nybegynder
19. juli 2002 - 11:32 #15
Ja, det skal den, min fejl. Prøv med:
  If (Not FSO.FileExists(Server.MapPath(rs("filnavn")))) Then
Avatar billede bobbedude Nybegynder
19. juli 2002 - 11:45 #16
http://www.rc-internet.com/mediebank/tester/test.asp

Har nu

Set rs = Connect.Execute("SELECT * FROM billeder;")
imagetest=rs("filnavn")
Do while not rs.eof
  If (Not FSO.FileExists(Server.MapPath("&stien&imagetest&"))) Then
    Response.write "Filen " & rs("filnavn") & " er ikke i mappen, her skal du sætte den slet linie ind<br>"
  End If
  rs.movenext
loop

Men den siger at der ikke er nogen af dem der er i databasen???
Arrg *grin*
Avatar billede ras2000 Nybegynder
19. juli 2002 - 11:55 #17
Denne løkke skulle gå alle de billeder igennem der er i databasen, og se om de er i mappen. Prøv at skrive linien Server.MapPath("&stien&imagetest&") ud for hver enkelt, så kan du se om stien er korrekt.
Avatar billede bobbedude Nybegynder
19. juli 2002 - 11:58 #18
det har jeg prøvet og de er i det rigtige dir.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 12:04 #19
Jamen, den side du har linket til, skriver da ikke det ud du skriver i koden foroven...
Avatar billede bobbedude Nybegynder
19. juli 2002 - 12:06 #20
det er fordi jeg ikke skriver diret med ud for oven men diret er i dataabasen.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 12:10 #21
Jeg er ikke helt med på hvad du laver nu. Så vidt jeg har forstået, vil du gå alle posterne i databasen igennem, og tjekke om billedet er i mappen. Hvis billedet ikke er der, skal det slettes fra databasen. Hvorfor siger du så at billedet ikke er i databasen?
Avatar billede bobbedude Nybegynder
19. juli 2002 - 13:04 #22
hehe undskyld jeg jokker rundt i det:

Alle billeder ligger i Dir'et
e:/dir/mediebank/tester

I databasen sætter jeg Stien ind som /mediebank/tester/
og billedet ind som navn.jpg

Håber du forstår.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 13:07 #23
Roder du ikke lidt rundt i / og \
Avatar billede bobbedude Nybegynder
19. juli 2002 - 13:15 #24
arg jeg giver snart op
Avatar billede ras2000 Nybegynder
19. juli 2002 - 13:19 #25
Diret hedder vel e:/dir/mediebank/tester, så stien skal vel hedde:
\mediebank\tester\
Avatar billede bobbedude Nybegynder
19. juli 2002 - 18:23 #26
du har ret men arrg jeg har tabt tråden total nu... Måske skulle jeg bare give op og glemme det script?
Avatar billede bobbedude Nybegynder
19. juli 2002 - 19:56 #27
så kører det sgu

If FSO.FileExists( ""&mapperoden&stien&billedet&"" ) Then
    Response.write "Den er her<br>"
    else
    response.write "Den er her ikke<br>"
    End If
  rs.movenext
loop

Fejlen var at jeg manglede et " i FSO.FileExists( ""
Det er lidt lamt men det var det der gjorde det.

Tak for hjælpen ras2000 og særligt for din tolmodighed hehe :ø)
Avatar billede bobbedude Nybegynder
19. juli 2002 - 19:57 #28
Hey du skal da smide et svar, løkken du lavede virkede jo.
Avatar billede bobbedude Nybegynder
22. juli 2002 - 11:00 #29
ras2000 >> Smid et svar
Avatar billede bobbedude Nybegynder
26. juli 2002 - 09:33 #30
ras2000 >> Jeg lukker spørgsmålet men hvis du på en eller anden måde er forhindret i at smide et svar så skal du bare sige til når du igen er her for så får du naturligvis dine point.
Avatar billede ras2000 Nybegynder
26. juli 2002 - 10:17 #31
Hej, jeg har lige ligget syg. Glad for at du fik det til at funge.
Avatar billede bobbedude Nybegynder
26. juli 2002 - 10:29 #32
hej ras2000 >> troede du var på ferie eller sådan noget.
Godbedering og jeg har oprettet et sp til dig her http://www.eksperten.dk/spm/239779
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