1

サーバー上にファイルを作成してから、データを書き込みたい

<script runat="server" language="VBScript">
        Function saveData() 
            Const ForReading = 1, ForWriting = 2 
            Dim fso, f 
            Set fso = Server.CreateObject("Scripting.FileSystemObject") 
            Set f = fso.OpenTextFile("ecr.txt", 8,true) 
            f.WriteLine("osgfouds") 
        End Function
</script>

ブラウザの「Server.CreateObject」行に「オブジェクトが必要です: サーバー」というエラーが表示されます

4

2 に答える 2

0

Server.createobject は、サーバー自体の VBScript/ASP スクリプト用です。このため、クライアント ブラウザはサーバーをサポートできません。

追記として。ファイルを開いたままにし、再度書き込もうとするとエラーが発生するため、ファイル オブジェクト (f) を閉じる必要があります。また、ForAppending ビットを追加して、fso.opentext ファイルで指定できるようにしました。

スクリプトを修正するには:

<script runat="server" language="VBScript">
        Function saveData() 
            Const ForReading As String = 1
            Const ForWriting As String = 2
            Const ForAppending As String = 8

            Dim fso as Object
            Dim f as Object
            Set fso = CreateObject("Scripting.FileSystemObject") 
            Set f = fso.OpenTextFile("ecr.txt", ForAppending, true) 
            f.WriteLine("osgfouds") 
            f.Close
        End Function
</script>

編集

これは更新された質問です ->ここから

編集

わかりました、あなたの前の質問とこれを見てください。ASP はサーバー レベルで実行され、vbscript を Web サイト インターフェイスにロードします。ASP に直接アタッチされた Vbscript は、サーバー レベルで実行されます。

例えば

<%
Const ForAppending = 8

dim fn,fp,fpn,wl,fulltext : fn = replace(formatdatetime(Now, 2), "/", "-") & ".txt"
Dim fso, msg :  fp = "C:\Users\...\Desktop\Logs\"
fpn = fp & fn
dim sep : sep = "==========================================================================="&vbcrlf
dim ssep : ssep = vbcrlf & "--------------------------------------"
fso = CreateObject("Scripting.FileSystemObject")

dim IPAddress, HostName, LUname
IPAddress = Request.ServerVariables("remote_addr")
If (fso.FileExists("C:\Users\...\Desktop\Logs\" & fn)) Then
    dim inSession,newuser
    wl = fso.OpenTextFile(fpn, ForAppending, True) 
    inSession = fso.OpenTextFile("C:\Users\...\Desktop\Logs\" & fn, 1)
    fulltext = inSession.ReadAll
'.....Code continues'
%>

そのため、クリック イベントをアクティブにして、それを VBScript にアタッチしてサーバー側のファイルに書き込もうとしても、vbscript は関係なくクライアントに書き込もうとするため、これは機能しません。

ユーザー エントリの更新用に設計された asp/vbscript の適切な方法は、次の方法で実行する必要があります。

ブラウザ - クリック -> サーバーへのリクエスト -> サーバーがリクエストを処理 -> 新しいページを提供 -> ブラウザ

提供された証拠 ->ここ

ただし、XMLHTTPRequest または Ajax/Javascript を使用してスクリプトを有効にすることはできます。実は面白いことに、最近、このような非常に基本的なスクリプトを実行する方法について尋ねました. そのため、これを行う方法は次のとおりです。

You have your HTML file(whatever.html):
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script type ="text/javascript" >
    $(function () {
        $("#button").click(function () {
        $.get("test2.aspx", {
            loadData: "John"
        })
            .done(function (data) {
            if (data === "Fail") {
                alert("Logging Failed!");
            } else {
                alert("Logged Success!");
            }
        })
            .fail(function () {
            alert("error");
        });
    });
});
    </script>
</head><body>
<input type="button" id="button" value="Ecriture"></body>

ASPX ファイル (test2.aspx) があります。

<%@ Page Language="VB" %>
<%
        Dim LogData As String : LogData = Request.Params("loadData")
        Dim SaveFile As String
        Const ForReading As Integer = 1
        Const StorageDirectory = "C:\Users\...\Desktop\Logs\serverlog.txt"
        Const ForWriting As Integer = 2
        Const ForAppending As Integer = 8
        If Len(LogData) = 0 Then LogData = "{EMPTY STRING}"
        Dim fso As Object
        Dim f As Object
        fso = CreateObject("Scripting.FileSystemObject")
        f = fso.OpenTextFile(StorageDirectory, ForAppending, True)
        f.WriteLine("New Entry:" & LogData)
        f.Close()
        If Err.Number <> 0 Then
            SaveFile = "Fail"
        Else
            SaveFile = "Success"
        End If
        Response.Write(SaveFile)
%>

サーバーがファイルの更新を維持できるように、StorageDirectory は共有ネットワーク フォルダーである必要があります。

このコードをテストしましたが、動作します。幸運を

于 2014-03-13T14:42:32.910 に答える