【问题标题】:Server.CreateObject(“Scripting.FileSystemObject”) issue - Object required:Server (code:0) ASP/VBscriptServer.CreateObject(“Scripting.FileSystemObject”)问题 - 需要对象:服务器(代码:0)ASP/VBscript
【发布时间】:2014-03-13 08:19:22
【问题描述】:

我想在我的服务器上创建一个文件,然后写入数据

<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”行告诉我“需要对象:服务器”

【问题讨论】:

    标签: asp.net vbscript createobject


    【解决方案1】:

    Server.createobject 将用于服务器本身的 VBScript/ASP 脚本。由于这个原因,客户端浏览器将无法支持服务器。

    作为补充说明。您需要关闭文件对象(f),因为它会使文件保持打开状态并在您尝试再次写入时导致错误。另外,我添加了 ForAppending 位,以便您可以在 fso.opentextfile 中指定它。

    所以要修复你的脚本:

    <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>
    

    编辑

    这是来自 -> Here的更新问题

    编辑

    好的,看看你上一个问题和这个问题。事情是这样的:ASP 在服务器级别运行并将 vbscript 加载到网站界面中。直接附加到 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 的正确方法需要按以下方式执行:

    BROWSER - 点击 -> 请求服务器 -> 服务器处理请求 -> 提供新页面 -> BROWSER

    提供的证据 -> Here

    但是,您仍然可以使用 XMLHTTPRequest 或 Ajax/Javascript 来激活脚本。实际上,有趣的是,我刚刚询问了how to execute a very basic script like this recently。所以这里是如何做到的:

    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 必须是共享网络文件夹,以便服务器可以保持更新文件。

    我已经测试了这段代码,它可以工作。祝你好运

    【讨论】:

    • 我已经尝试过这样做,但是,它会在客户端创建文件...(准确地说是在用户的桌面上)
    • 你能把你的整个代码贴出来。看来这个问题可能与您执行代码的方式有关。
    • 查看我上面更新的代码。应该可以解决您的问题。
    【解决方案2】:

    这将在 VB.NET 中工作。试试这个

        Dim oFs
        Dim vSharePath
        Dim vFolder
        Dim vPath
        Dim objTStream
        vSharePath = ConfigurationManager.AppSettings("NetworkPath").ToString
    
        vFolder = Year(Date.Now) & Month(Date.Now).ToString & Date.Now.Hour.ToString & Date.Now.Second.ToString
    
        vPath = vSharePath & "\" & vFolder
    
        oFs = Server.CreateObject("Scripting.FileSystemObject")
        If Not (oFs.FolderExists(vPath)) Then
            Call oFs.CreateFolder(vPath)
            objTStream = oFs.CreateTextFile(vPath & "\test.txt", True)
            'Write some text to the file
            objTStream.WriteLine("Hello World!")
            objTStream.WriteLine()
            objTStream.WriteLine("This is my first text file!")
            'Close the TextStream object
            objTStream.Close()
            'Free up resources
            objTStream = Nothing
        End If
        oFs = Nothing
    

    http://webcheatsheet.com/asp/filesystemobject_object.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2018-09-19
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多