/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hjælp til Scripting.FileSystemObject
Fra : Johnny Winther Ronne~


Dato : 11-01-05 18:02

Jeg kan ikke få lov at oprette en fil, ligegyldig hvad jeg gør så
”fryser” siden ved linie 3 og efter et par forsøg fryser serven også.

Jeg har fundet eksemplet både i ”ASP in a Nutshell” og i ”Teach
Yourself E-commerce programing in ASP”. Men jeg kan godt nok ikke få
det til at fungere.

Jeg har forsøgt at afinstallere og geninstallere web-serveren (PWS på
W2KP). Jeg kar kontrolleret at jeg har den DLL fil som fil objektet
bruger.

Hvad gør jeg forkert?

<%
1: dim fs
2: Set fs = Server.CreateObject("Scripting.FileSystemObject")
3: Set textFile = fs.CreateTextFile("f:\converted.txt")
4: '-- textFile.write("hello world")
5: '-- textFile.close()
6: '-- textFile = nothing
7: '-- fs = nothing
%>

Med venlig hilsen
Johnny Winther Ronnenberg



 
 
terje (11-01-2005)
Kommentar
Fra : terje


Dato : 11-01-05 21:16

Johnny Winther Ronnenberg (slet GH87Y) wrote:

> Hvad gør jeg forkert?
>
> <%
> 1: dim fs
> 2: Set fs = Server.CreateObject("Scripting.FileSystemObject")
> 3: Set textFile = fs.CreateTextFile("f:\converted.txt")
> 4: '-- textFile.write("hello world")
> 5: '-- textFile.close()
> 6: '-- textFile = nothing
> 7: '-- fs = nothing
> %>

Her er dokumentasjonen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jsmthcreatetextfile.asp

Denne funksjonen gis som eksempelkode:

Sub CreateAfile
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
End Sub

Hvis en sammenligner dette med din kode så er det ikke vanskelig å se
forskjeller:
1) Du har ikke dimmet objektet textfile. (Dessuten er dette et svært
uheldig navn på et fso objekt. Det ligner dessuten mistenkelig på et
reservert ord.)
2) Du benytter paranteser på Close metoden.
3) Du benytter nøkkelordet Nothing, hvilket jeg vil tro genererer en feil.
4) Du setter fs nothing uten å bruke statementet Set.

Prøv å endre disse tingene og kjør koden på nytt.

Jeg ville lagt slik kode i en egen funksjon, fordi dette er generell
kode som kan benyttes igjen og igjen i mange ulike asp filer. Slik ville
jeg ha skrevet denne koden:

Function CreateFile(sFullPath, sTxt)
On Error Resume Next

Dim oFSO, oFile

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.CreateTextFile(sFullPath, True, False)
oFile.Write sTxt
oFile.Close
Set oFSO = Nothing

CreateFile = (Err.Number = 0)
End Function

terje

Johnny Winther Ronne~ (11-01-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 11-01-05 22:07

Takker meget for svaret, men det er for langt sengetid til at
afprøve det nærmere.

Det er tydeligt, at du ved hvad du skriver om, så jeg håber jeg må
trække på dig igen en anden gang.

Men en ting er sikkert man kan til enhver tid slette indholdet af
en variabel med "nothing", personligt kan jeg bedre lide Null
eller devnull, men Bill Gates har sine egen ideer.

Parenteser er fuldt gyldige i VBscript selv om de sjældent bruges.

Med venlig hilsen
Johnny Winther Ronnenberg


terje (12-01-2005)
Kommentar
Fra : terje


Dato : 12-01-05 07:34

Johnny Winther Ronnenberg (slet 2WSH6) wrote:

> Men en ting er sikkert man kan til enhver tid slette indholdet af en
variabel med "nothing", personligt kan jeg bedre lide Null eller
devnull, men Bill Gates har sine egen ideer.


I din kode skriver du:
textFile = nothing

uten å bruke ordet _Set_ og det vil garantert generere en feil. Det
riktige er altså:
Set textFile = nothing

En annen ting er at dokumentasjonen ikke anbefaler at dette TextStream
objektet settes til Nothing, kun at man kaller dets Close metode.
Derimot skal selve fso (oFSO) objektet settes til nothing, men dette har
igjen ingen close metode.

I kodeeksemplet fra MSDN så gjøres dessverre ikke dette og det mener jeg
må være en opplagt feil. Bortsett fra dette punktet mener jeg det må
være riktig å følge det som dokumentasjonen anbefaler, ihvertfall til
det motsatte er bevist.

> Parenteser er fuldt gyldige i VBscript selv om de sjældent bruges.


Ja, men her er problemet at et stykke kode ikke vil kjøre. Mitt poeng
var å påpeke forskjeller mellom din kode og det eksemplet som
dokumentasjonen gir for CreateTextFile metoden.

En annen ting er at du skriver at din kode er hentet direkte fra 2 bøker
om ASP. Siden koden har disse manglene er det fristende å spørre om du
er helt sikker på at bøkene er korrekt sitert?

terje

Johnny Winther Ronne~ (12-01-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 12-01-05 21:54

>I din kode skriver du:
>textFile = nothing

>uten å bruke ordet _Set_ og det vil garantert generere en feil.
Det
>riktige er altså:
>Set textFile = nothing

Du har helt ret, du har lige løst et andet problem jeg boksede med.

>En annen ting er at dokumentasjonen ikke anbefaler at dette
TextStream
>objektet settes til Nothing, kun at man kaller dets Close metode.
>Derimot skal selve fso (oFSO) objektet settes til nothing, men
dette har
>igjen ingen close metode.

Du har næsten ret fso har en close, men den udførere ikke en
frigørelse af hukommelsen. Paradosalt nok har textstream objektet
en close, der rent faktisk virker som en destructor. Hvis man
forsøger at sætte textstream til nothing efter en close, får man
en fejlmelding om at objektet ikke er defineret hvilket kun kan
betyde at at close virker som destructor.

>I kodeeksemplet fra MSDN så gjøres dessverre ikke dette og det
mener jeg
>må være en opplagt feil. Bortsett fra dette punktet mener jeg det

>være riktig å følge det som dokumentasjonen anbefaler, ihvertfall
til
>det motsatte er bevist.

MSDN er fyldt med åbenlyse fejl. Men vi er enige om at man bør
følge dokumentationen eller standarderne.

>En annen ting er at du skriver at din kode er hentet direkte fra
2 bøker
>om ASP. Siden koden har disse manglene er det fristende å spørre
om du
>er helt sikker på at bøkene er korrekt sitert?

Det kan du bande på de er, vælg selv sproget.

Men i virkeligheden er problemet et eller andet sted i enten min
windows eller min server installation. Jeg har prøvet at fjerne
alle webmapper og at afinstallere og geninstallere webserveren
endnu en gang. Men det virker bare stadig ikke.

Men når jeg smider det ind i en simpel html fil og kører det uden
om webserveren så fungerer det fint, så problemet er nok
webserveren.

Med venlig hilsen
Johnny Winther Ronnenberg



Johnny Winther Ronne~ (13-01-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 13-01-05 21:28


>Du har næsten ret fso har en close, men den udførere ikke en
>frigørelse af hukommelsen. Paradosalt nok har textstream objektet
>en close, der rent faktisk virker som en destructor. Hvis man
>forsøger at sætte textstream til nothing efter en close, får man
>en fejlmelding om at objektet ikke er defineret hvilket kun kan
>betyde at at close virker som destructor.

Jeg må lige korrigere mig selv.

fso.close er et kald til streamobjektet og er ikke en del af
hovedobjektet. Så det virker kun, hvis man har en instans af file
stream objektet.

Beklager, jeg var lidt hurtig på aftrækkeren.

Med venlig hilsen
Johnny Winther Ronnenberg


terje (13-01-2005)
Kommentar
Fra : terje


Dato : 13-01-05 21:33

Johnny Winther Ronnenberg (slet D6T4B) wrote:
>>Du har næsten ret fso har en close, men den udførere ikke en
>>frigørelse af hukommelsen. Paradosalt nok har textstream objektet
>>en close, der rent faktisk virker som en destructor. Hvis man
>>forsøger at sætte textstream til nothing efter en close, får man
>>en fejlmelding om at objektet ikke er defineret hvilket kun kan
>>betyde at at close virker som destructor.
>
>
> Jeg må lige korrigere mig selv.
>
> fso.close er et kald til streamobjektet og er ikke en del af
> hovedobjektet. Så det virker kun, hvis man har en instans af file
> stream objektet.

Hvis du gir dine objekter riktige navn så er det enklere å holde tunga
rett i munnen:

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.CreateTextFile(sFullPath, True, False)
oFile.Write sTxt
oFile.Close
Set oFSO = Nothing

terje

Søg
Reklame
Statistik
Spørgsmål : 177548
Tips : 31968
Nyheder : 719565
Indlæg : 6408803
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste