使用 CreateDirectory 动态创建 web 文件夹
Posted
技术标签:
【中文标题】使用 CreateDirectory 动态创建 web 文件夹【英文标题】:Using CreateDirectory to dynamically create a web folder 【发布时间】:2012-08-29 20:20:21 【问题描述】:。 .
我正在使用 C# 后端改造 ASP.NET 应用程序。我正在尝试开发一个文件上传器来使用 CKEditor。
我有一个用于搜索文件的
所以,如果我运行我的代码并保存一个文件(假设它是“SomeImage.jpg”),我的 SaveTo 文本框的内容就是“/Images/Saved/SomeImage.jpg”。然后我的代码使用文本框内容保存到 /Images/Saved/SomeImage.jpg。这件作品很好。
这是我遇到麻烦的地方:如果用户输入“/Images/Saved/SomeFolder/SomeImage.jpg”,我希望我的代码动态生成一个文件夹。换句话说,如果“/Images/Saved”中不存在“SomeFolder”,我想创建它。
效果不是很好。它不会创建文件夹,而是将文件保存到默认的 /Images/Saved 文件夹中。
关于这个,我有几个问题。
-
我正在尝试使用 Directory.CreateDirectory 来执行此操作。我可以不使用 web-root-relative 目录(如“/Images/Saved”),还是需要完全限定它?
如果我需要完全限定它,我可以使用 URL(例如“http://www.mysite.com/Images/Saved”),还是需要物理文件路径(例如“c:\ wwwroot\Images\已保存”)?
这是我的代码 sn-p:
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。 【参考方案1】: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!";
【讨论】:
让我花一些时间来消化这个并将其合并到我的代码中。我会告诉你进展如何。以上是关于使用 CreateDirectory 动态创建 web 文件夹的主要内容,如果未能解决你的问题,请参考以下文章
使用 System.IO.Directory.CreateDirectory 在网络驱动器中创建一个文件夹 [重复]
delphi中CreateDirectory和CreateDir有啥区别?创建文件夹的同时能定义文件夹的属性吗?
c++创建文件夹,mkdir(),_mkdir(),CreateDirectory()