经典 asp 在网络服务器上创建文本文件:错误 800a0034 Bad_file_name_or_number

classic asp create text file on webserver: error 800a0034 Bad_file_name_or_number

我在 VBS 中有一个经典的 asp 页面,我正在尝试使用以下代码在网络服务器上创建一个文件。

Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.CreateTextFile("\localhost\inetpub\wwwroot\cs\batch3456dirs.bat", true)

此returns以下错误:

|666|800a0034|Bad_file_name_or_number

第 666 行是 CreateTextFile 行。

根据 Microsoft 文档,这意味着我正在尝试创建一个文件名无效的文件。然后它解释了文件名的规则,我的规则似乎是完全有效的。

关于如何进一步解决此问题的任何建议或想法?

createtextfile() 函数 运行 在 Web 服务器上,但在本地服务器本身的上下文中。简而言之,您提供的任何路径都必须像您登录到服务器上的 windows 桌面并尝试 CD 到该路径一样进行解析。

格式 \localhost... 是 UNC 路径。有关 UNC 路径和 windows 的讨论,请参阅 this question。除非您确定有为 \localhost 映射的 UNC 路径,否则这可能是您的问题。您可能假设 \localhost 将是一个合理的使用路径,但正如我所说,除非您确定它可用,否则这是一个无效的选择。

最后,如果您决定为 \localhost 设置一个共享,您将进入一些有趣的领域,围绕 Web 服务器运行的用户上下文。您会看到您必须为配置为 IIS 的 运行-as 身份的 IIS 用户,因此您需要知道这一点并创建所需的配置以向该用户提供共享。

如果是我,我会切换到使用标准 windows 路径,尽管即使那样你也需要欣赏 运行-as 用户上下文和安全配置等

首先要检查以确保您的用户有权访问该文件夹。假设您没有使用 windows 身份验证,请确保 IUSR 帐户对该文件夹具有写入权限。

其次,除非将 inetpub 设置为文件夹共享,否则您的语法将不起作用。如果您网站的根目录位于 CS 文件夹中,您可以执行以下操作:

Set file1 = fso.CreateTextFile(Server.MapPath( "/cs/batch/123456dirs.bat" ), true)