[ASP] Bepalen datum laatste wijziging van een bestand*

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

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Ik wil de datum waarop een bestand voor het laatst gewijzigd is opslaan in de database, en als mijn script draait moet ie controleren of de datum in de database nog steeds hetzelfde is, en anders moet ie wat doen.
Nou kwam ik erachter dat file.DateLastModified een foute datum teruggeeft (namelijk die van gister, terwijl ik de file net geedit heb en opnieuw geupload, en de server vertelt me ook netjes de nieuwe datum).

Dit is wat Windows me vertelt: Gewijzigd: woensdag 25 februari 2004 13:57:38
En dit zegt mijn script: 24/02/2004 1:24:19 PM

Ik heb meerdere malen geprobeerd die file opnieuw te wijzigen en uploaden, en Windows geeft de goeie datum aan, de server ook, maar ASP is het er niet mee eens...

Ik heb nog eens wat zitten kloten door een geheel nieuwe file te uploaden en daarvan de datum te bekijken. Dat is wel gewoon de datum van vandaag... Maar als als ik hem vervolgens wijzig en opnieuw upload, dan blijft toch die eerste datum/tijd staan. Cachet ASP ergens die ingelezen datums ofzow?

Ik heb, wanhopig als ik ben, zelfs DateLastAccessed willen gebruiken, maar die wordt de helft van de tijd ook niet netjes geupdate...

Is dit een bekend probleem? Wat doe ik fout?

Edit: Excuses voor de topic name, ben kennelijk vergeten hem af te maken... 8)7

[ Voor 4% gewijzigd door NMe op 25-02-2004 15:55 . Reden: Topic name ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

NMe84 schreef op 25 februari 2004 @ 15:54:
Ik wil de datum waarop een bestand voor het laatst gewijzigd is opslaan in de database, en als mijn script draait moet ie controleren of de datum in de database nog steeds hetzelfde is, en anders moet ie wat doen.
Nou kwam ik erachter dat file.DateLastModified een foute datum teruggeeft (namelijk die van gister, terwijl ik de file net geedit heb en opnieuw geupload, en de server vertelt me ook netjes de nieuwe datum).

Edit: Excuses voor de topic name, ben kennelijk vergeten hem af te maken... 8)7
als je de file wijzigt, en daarna de .lastmodified date niet bv een paar minuten later wordt, dan sluit dat dus een verkeerde tijd op de server uit.
Raar, ik werk hier nl ook mee, en dat gaat altijd perfect. Al zou ik niet weten of zoiets ook gecachet kan worden. Zou zeggen van niet...
Weet je wel zeker dat je de juiste file te pakken hebt, doe eens wat dingen met
code:
1
response.write FileNaam
ofzo

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Ik weet zeker dat ik de goeie file heb, want ik doe er ook nog andere dingen mee. Ik open laterna diezelfde file voor lezen en maak er een zoekindex van in een Access database. Plus: die datum die ik te lezen krijg is daadwerkelijk een datum die bij die file hoort, bij nieuwe files is het de creation datum/tijd.

.modbreak: kicken doen we pas na 24 uur (staat in de FAQ). Niet iedereen is altijd online, heb gewoon wat meer geduld :)

[ Voor 20% gewijzigd door .oisyn op 25-02-2004 19:19 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
En als je ctrl+f5 doet op die pagina? Misschien wordt de inhoud gewoon uit de browsercache gehaald.

[ Voor 1% gewijzigd door Gert op 25-02-2004 19:57 . Reden: zpelling ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Nope, dat is het helaas ook niet... :(

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
*Kick* Is er echt niemand die een idee heeft hoe dit kan? ;(

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

NMe84 schreef op 26 februari 2004 @ 21:07:
*Kick* Is er echt niemand die een idee heeft hoe dit kan? ;(
als je in je aanroep netjes iets als
ASP:
1
2
3
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
s = "Last Modified: " & formatdatetime(f.DateLastModified,1)

en je krijgt geen error, maar wel een datum, dan zou ik niet weten wat dat anders kan zijn dan de werkelijke DateLastModified van het betreffende bestand. Van problemen hiermee heb ik iig nog nooit gehoord, en nooit problemen mee gehad

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Ik zal je een stuk relevante code laten zien, misschien zie je dan wat ik fout doe:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Dim Pad         'Het pad naar f
    Dim file            'TextStream object
    Dim Gewijzigd       'Boolean die een wijziging aangeeft
    Gewijzigd = true
    Pad = Server.MapPath(f)
    If fs.FileExists(Pad) Then
      Set file = fs.GetFile(Pad)
      If CDate(rs("gewijzigd")) = file.DateLastModified Then
        Gewijzigd = false
        rs.Close
      Else
        'bla
      End If
      'bla
    End If

In deze code is f de parameter die mijn sub (waar dit stuk code in staat) binnen krijgt. F is een string.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 27-05 13:28
ik zou sowieso met een DateDiff werken.

zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
Dim date1, date2
date1 = cDate(rs("gewijzigd")
date2 = cDate(file.dateLastModified())

if (DateDiff("n",date1,date2)) = 0 then 
     Gewijzigd = false
     rs.close()
else
    'bla
end if
%>
DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]])
Returns the number of intervals between two dates.
Ik weet niet wat je nu terugkrijgt?

Everyday's an endless stream, of cigarettes and magazines...


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Misschien komt dit als een flauw reply over, zo is het echt niet bedoeld, maar weet je heel zeker dat je script naar het goede bestand verwijst?

(eigen ervaring :X)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Weet ik zeker ja, het script gaat vervolgens alle woorden in die file inlezen en in een database indexeren. De woorden die hij invoegt kloppen perfect, dus ook de file.
Ik zal dat DateDif eens proberen, maar file.DateLastModified == CDate(rs("gewijzigd")), dus dat haalt toch niks uit.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
*kick* Nog één laatste poging voor ik het opgeef: weet echt niemand wat het dan wel kan zijn?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

NMe84 schreef op 29 februari 2004 @ 12:11:
*kick* Nog één laatste poging voor ik het opgeef: weet echt niemand wat het dan wel kan zijn?
nee, maar ik heb nog wel wat opmerkingen over je code, die loopt niet echt lekker:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Dim Pad            'Het pad naar f
    Dim file            'TextStream object
    Dim Gewijzigd        'Boolean die een wijziging aangeeft
    Gewijzigd = true
    Pad = Server.MapPath(f)
    If fs.FileExists(Pad) Then
      Set file = fs.GetFile(Pad)
      If CDate(rs("gewijzigd")) = file.DateLastModified Then
        Gewijzigd = false
        rs.Close
      Else
        'bla
      End If
      'bla
    End If


zo te zien sluit je een recordset af ergens middenin een if statement. Dat is nooit handig, doe dat als je iets open hebt staan, na het afhandelen van je if/then clause. Anders blijft'ie open wanneer de else wordt uitgevoerd?? Als'tie echter ook in de else staat, dan zou ik hem ook naar beneden halen. Is veiliger.
En ik begrijp niet dat je default het gewijzigd zijn van je file op true zet. Andersom lijkt me handiger: iets is niet gebeurt, tenzij wordt aangetoond dat het wel zo is.

toch? :?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Verwijderd schreef op 29 februari 2004 @ 15:03:
nee, maar ik heb nog wel wat opmerkingen over je code, die loopt niet echt lekker:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Dim Pad            'Het pad naar f
    Dim file            'TextStream object
    Dim Gewijzigd        'Boolean die een wijziging aangeeft
    Gewijzigd = true
    Pad = Server.MapPath(f)
    If fs.FileExists(Pad) Then
      Set file = fs.GetFile(Pad)
      If CDate(rs("gewijzigd")) = file.DateLastModified Then
        Gewijzigd = false
        rs.Close
      Else
        'bla
      End If
      'bla
    End If


zo te zien sluit je een recordset af ergens middenin een if statement. Dat is nooit handig, doe dat als je iets open hebt staan, na het afhandelen van je if/then clause. Anders blijft'ie open wanneer de else wordt uitgevoerd?? Als'tie echter ook in de else staat, dan zou ik hem ook naar beneden halen. Is veiliger.
In die else is het eerste wat ie doet de RecordSet closen. Ik kan hem dus wel naar boven (buiten de if) halen, maar heb ik niet bij stil gestaan. Kost me dan wel een extra variabele om rs("gewijzigd") in op te slaan. :P
Verwijderd schreef op 29 februari 2004 @ 15:03:
En ik begrijp niet dat je default het gewijzigd zijn van je file op true zet. Andersom lijkt me handiger: iets is niet gebeurt, tenzij wordt aangetoond dat het wel zo is.

toch? :?
Je hebt in mijn script verschillende modi, en bij de meesten moet ie sowieso ALLE bestanden op de server aflopen. Gewijzigd op true zetten zorgt ervoor dattie dat doet. Misschien heb ik vage logica maar voor mij is dit begrijpelijk, en er staat ook nog wat commentaar over boven mijn functie. :)

En ik begin mijn probleem behoorlijk irritant te vinden... ;(

[ Voor 4% gewijzigd door NMe op 01-03-2004 09:27 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Na nog wat testen kan het volgens mij niet anders dan dat ASP of IIS/PWS (geen idee wat er op die server draait) de rotzooi cachet. Nieuwe files krijgen juiste data, maar die datum verandert nooit meer. In ASP althans, want alle andere programma's die ik probeer geven het goed aan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
*kleine kick* Wat ook zou kunnen is dat IIS (volgens mij draait de server IIS 4, ik wacht nog op een mail van de beheerder om dat te bevestigen) die property niet ondersteunt... Of ben ik nou aan het raaskallen? :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Topicstarter
Ok, het probleem is opgelost. Het was (zoals gewoonlijk) weer eens iets heel simpels, maar wel iets essentieels volgens mij, dus vandaar deze post.

Bij het testen van mijn script voegde ik steeds een teken toe aan een file en haalde dit teken weer weg (dit omdat het bestand dat ik wijzigde onveranderd op de server moest blijven staan). Windows geeft na afloop netjes die nieuwe wijzigingsdatum. ASP doet dat echter niet.
Vervolgens bedacht ik me dat ASP misschien een alternatieve methode heeft om de DateLastModified uit te lezen aan de hand van het aantal bytes dat het bestand groot is, of misschien met een hash of iets dergelijks. Daarom heb ik eens gewoon een spatie toegevoegd zonder hem daarna weer weg te halen. Daarna heb ik de file geupload en wat blijkt? Nu werkt het wel!
Schijnbaar is er dus een inconsistentie tussen de "Windows manier" en de "ASP manier" van het ophalen van de laatste wijzigingsdatum. En daar zit je dan 2 weken op te zoeken.... 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1