【问题标题】:How to create Directory/File into IIS using ASP.NET C# Entity Framework如何使用 ASP.NET C# Entity Framework 在 IIS 中创建目录/文件
【发布时间】:2020-11-28 23:57:48
【问题描述】:

我的工作环境是:

  • Windows 7 专业版
  • Visual Studio 2019、ASP.NET MVC、实体框架
  • SQL Server Express
  • IIS 7.5 版(本地安装)

当我在 Visual Studio 中调试时,在此路径 ~/Content/Documentacion/log/ 内创建目录/文件没有问题(使用 VS 附带的 IIS Express)。

但是当我发布解决方案并使用 IIS 7.5 运行它时,没有创建目录/文件,我无法理解问题。

这是代码:

public void CreaLogATiempos(DateTime fin, bool sobrescribir = false)
{
    try
    {
        text = "xxxxx= ";
        string docPath = "~/Content/Documentacion/log/" ;
        var folder = System.Web.HttpContext.Current.Server.MapPath(docPath );

        if (!Directory.Exists(folder))
        {
            Directory.CreateDirectory(folder);
        }

        FileInfo MyFile = new FileInfo(System.Web.HttpContext.Current.Server.MapPath(docPath + this.archivo));

        if (!MyFile.Exists)
        {
            StreamWriter crear = new StreamWriter(System.Web.HttpContext.Current.Server.MapPath(docPath + this.archivo));
            crear.WriteLine(text);
            crear.Close();
        }
        else
        {
            StreamWriter crear = new StreamWriter(System.Web.HttpContext.Current.Server.MapPath(docPath + this.archivo), true);
            crear.WriteLine(text);
            crear.Close();
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception: " + e.Message);
    }
}

也许有人可以看到错误或对问题有所了解?

【问题讨论】:

  • 将异常记录到文件中,它可能会有所帮助。但我认为,IIS 进程登录权限存在问题。
  • 对我来说似乎是权限问题;当您从 IIS 运行它时,应用程序池用户是否具有创建目录权限?是的。 Backs 所说的 - 一些日志记录会有所帮助。

标签: c# asp.net entity-framework iis-7.5


【解决方案1】:

我可以给你介绍TextWriterTraceListener吗?将此添加到您的 Global.vb 文件中:

'adding tracing to a log.
Trace.Listeners.Clear()

Dim stream As New IO.FileStream(Server.MapPath("~/App_Data/trace.log"), IO.FileMode.Append)
Dim writer As New IO.StreamWriter(stream, System.Text.Encoding.UTF8)

Dim logListener As New TextWriterTraceListener(writer, "trace.log")
Trace.Listeners.Add(logListener)
Trace.AutoFlush = True

Trace.WriteLine($"{DateTime.Now.ToString} - class: Global.asax - method: Application_Start - message: Trace listener loaded.")

"~/App_Data"中创建一个trace.log文件

【讨论】:

  • 欢迎来到 StackOverflow。 OP的问题与C#相关。请提供 C# 代码,而不是 VB。
  • 感谢@PeterCsala 问题与asp.net 相关。我的回答是否解决了他的问题?我想是这样。下次我会更小心的。
  • @PeterCsala 最后,您的代码能够在 IIS 中创建文件。我已经将它翻译成 C#。我现在唯一的问题是,在创建文件后,我无法读取它,我需要停止 IIS 才能访问,但我认为它与我的代码中的“FileAccess”属性有关。
  • @Byron2017 这不是我的帖子,我刚刚编辑过。荣誉归于打字。
【解决方案2】:
  • 在visual studio中选择项目,按ALT+Enter打开该项目的设置属性,如下图

Picture

您可以按以下方式在控制器中使用此文件夹

var physicalPath = Server.MapPath(Settings.Default.CompanyImagePath);

【讨论】:

  • 您可以使用以下功能检查目录状态。如果它存在与否,如果不存在,它将在服务器上创建该目录。 `public static bool CheckFolderExists(string appFolderName) { //var appDataPath = Server.MapPath(Settings.Default.CategoryImagePath); if (!Directory.Exists(appFolderName)) { Directory.CreateDirectory(appFolderName);返回真; } 其他 { 返回真; } }'
猜你喜欢
  • 2017-02-19
  • 2014-05-21
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2017-01-02
  • 1970-01-01
相关资源
最近更新 更多