如何使用ASP.NET在同一服务器上读取文本文件?

时间:2009-06-02 18:08:57

标签: asp.net sql-server vb.net file-io

解决方案:

事实证明我没有检查它正在抬头的路径,对我来说很傻。一旦我追踪到这个问题并纠正了违规路径,那么读数就可以了。仍然对MSSQL问题感到困惑,因为文章平均不到10 000字节。


澄清:

我不确定你们中有些人是否认为我试图阅读的文件是在我的本地机器上。它驻留在Web上,与访问它的脚本位于同一服务器上。就在另一个目录中。


我写了一篇包含文章的在线帮助台应用程序。我遇到的一个问题 有些文章太长了,当我把它们放入我的MSSQL数据库时会被截断。我尝试使用TEXTVARCHAR(MAX)作为数据类型,但它仍然会被截断。

所以我决定将那些篇幅太长的文章放入文本文件中,并让我的应用程序从那里读取文本文件。我在开发环境中使用此代码,但它不能正常工作:

Dim output As String = String.Empty
Try
    Dim theArticle As gsClassroom = classArticles(iterate)
    If theArticle.Body.StartsWith("/docs/") Then
        Dim oReader As IO.StreamReader = Nothing
        Try
            oReader = New IO.StreamReader(Server.MapPath(String.Format("/dev{0}", theArticle.Body)))


        Catch ex As Exception
            output = String.Format("{0}<br /><br />{1}", ex.Message, "internal")
        Finally
            oReader.Close()
            oReader.Dispose()
            oReader = Nothing
        End Try
    Else
        output = theArticle.Body
    End If
Catch ex As Exception
    output = String.Format("{0}<br /><br />{1}", ex.Message, "external")
End Try
Response.Output.WriteLine(output)

起初,我认为是因为我没有将/dev路径前缀更改为/hlpdsk。但即使在我改变它之后,它也被轰炸了。我做错了什么?

4 个答案:

答案 0 :(得分:2)

在这些问题上我首先想到的是生产环境中的权限设置将不允许您访问该目录。

答案 1 :(得分:1)

我知道你想解决阅读这个文本文件的问题,但我建议你回去用varchar(MAX)从sql server表中读取文本。

请注意,当文本大于几KB时,会将其拆分为多个结果。因此,在阅读时,您必须从datareader读取并写入字符串生成器。完成后,您将拥有字符串构建器中的完整内容。

至于文件阅读不要这样做。它在服务器环境中会有很多文件权限问题。

答案 2 :(得分:1)

什么样的帮助台文章超过2 ^ 31-1个字节? (varchar(max)的限制)

一篇文章长期以来需要花费很长时间来加载,人们会认为该网站已被破坏并放弃。不是吗?

答案 3 :(得分:1)

失败的原因是权限,就像马修所说的那样。在VS中开发时,通常使用集成的Visual Studio Web服务器运行。运行此Web服务器时,它在您登录帐户的权限下运行,这意味着您可以访问本地PC上的所有内容。

当您部署到生产环境时,您正在IIS中运行,并且安全权限是您的应用程序正在运行的应用程序池的安全权限。默认情况下,AppPool在NetworkService帐户下运行,这意味着它具有最少访问PC上的本地资源。

您可以提升AppPool的权限,但这是一种不良做法和安全风险。如前所述,更好的方法是正确使用SQL Server中可用的数据类型来存储数据。