Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CreateDirectory动态创建web文件夹_C#_Asp.net_.net_Create Directory - Fatal编程技术网

C# 使用CreateDirectory动态创建web文件夹

C# 使用CreateDirectory动态创建web文件夹,c#,asp.net,.net,create-directory,C#,Asp.net,.net,Create Directory,我正在使用C#后端改造ASP.NET应用程序。我正在尝试开发一个文件上传程序来使用CKEditor 我有一个用于搜索文件的对象和一个TextBox对象(为此,让我们使用TextBox ID=“SaveTo”),用户在其中输入文件名和保存文件的路径。默认设置是我在Web.config中定义的文件夹(假设为“/Images/Saved”--注意:这是我的Web根目录下的现有文件夹) 因此,如果我运行代码并保存一个文件(假设它是“SomeImage.jpg”),则我的SaveTo文本框的内容是“/Im

我正在使用C#后端改造ASP.NET应用程序。我正在尝试开发一个文件上传程序来使用CKEditor

我有一个用于搜索文件的对象和一个TextBox对象(为此,让我们使用TextBox ID=“SaveTo”),用户在其中输入文件名和保存文件的路径。默认设置是我在Web.config中定义的文件夹(假设为“/Images/Saved”--注意:这是我的Web根目录下的现有文件夹)

因此,如果我运行代码并保存一个文件(假设它是“SomeImage.jpg”),则我的SaveTo文本框的内容是“/Images/Saved/SomeImage.jpg”。然后,我的代码使用文本框内容保存到/Images/Saved/SomeImage.jpg。那件作品很好

这里是我遇到麻烦的地方:如果用户输入“/Images/Saved/SomeFolder/SomeImage.jpg”,我希望我的代码动态生成一个文件夹。换句话说,如果“/Images/Saved”中不存在“SomeFolder”,我想创建它

结果不太好。它不会创建文件夹,而是将文件保存到默认的/Images/Saved文件夹中

说到这里,我有几个问题

  • 我正在尝试使用Directory.CreateDirectory来执行此操作。我可以使用web根相对目录(如“/Images/Saved”)吗?或者我需要完全限定它吗
  • 如果我需要完全限定它,我可以使用URL(例如。“http://www.mysite.com/Images/Saved),还是需要物理文件路径(例如“c:\wwwroot\Images\saved”)
  • 以下是我的代码片段:

    if (this.MyFileUpload.HasFile) {
        string SaveFile = "";
        string SavePath = this.SaveTo.Text.Trim();
    
        if (!SavePath.EndsWith("/")) { SavePath += "/"; }
    
    // I'm guessing that I'll need to change "/" to "\" and fully qualify the path
        getFileName = this.MyFileUpload.FileName;
        SaveFile = System.Web.HttpContext.Current.Server.MapPath("~" + SavePath) + getFileName;
        try
        {
            System.IO.FileInfo getFile = new System.IO.FileInfo(SaveFile);
            getFile.Directory.Create();
            this.MyFileUpload.SaveAs(SaveFile);
        }
        catch (Exception ex)
        {
            txtMessage.Text = getFileName + " save failed.  " + ex.Message;
        }
        txtMessage.Text = "File " + getFileName + " saved successfully!";
    }
    

    你的代码似乎有效。也许SaveTo.Text的路径不正确?这就是重点。默认情况下,SaveTo.Text中的路径是(使用我的示例)/Images/Saved。如果有人输入/Images/Saved/SomeFolder,我希望它在/Images/Saved下创建SomeFolder。让我花些时间消化一下,并将其合并到我的代码中。我会告诉你事情的进展。
    if (this.MyFileUpload.HasFile) {
        string SaveAs = this.SaveTo.Text.Trim().Replace('\\','/');
        string SaveFile = SaveAs;
        // Pull SavePath from web.config (should check that key exists first)
        string SavePath = System.Web.Configuration.WebConfigurationManager.AppSettings["SaveDirectory"];
        string SystemPath = string.Empty;
    
         // Handle case where SaveAs contains directory
        if (SaveAs.LastIndexOf("/") > -1) {
            SavePath = SavePath.TrimEnd('/') + "/" + SaveAs.Substring(0,SaveAs.LastIndexOf("/") + 1);
            SaveFile = SaveFile.Substring(SaveFile.LastIndexOf("/") + 1);
        }
    
        if (!SavePath.EndsWith("/"))  
            SavePath += "/"; 
    
        // Find the system path 
        SystemPath = System.Web.HttpContext.Current.Server.MapPath(SavePath);
    
        // Ensure the system path exists
        if (!System.IO.Directory.Exists(SystemPath))
            System.IO.Directory.CreateDirectory(SystemPath);
    
        // Ensure a filename was entered, if not use original file name
        if (string.IsNullOrEmpty(SaveFile))
            SaveFile = MyFileUpload.FileName;
    
        try
        {
            this.MyFileUpload.SaveAs(SystemPath + SaveFile);
        }
        catch (Exception ex)
        {
            txtMessage.Text = getFileName + " save failed.  " + ex.Message;
        }
        txtMessage.Text = "File " + getFileName + " saved successfully!";
    }