获取没有空格的文件名

时间:2018-01-24 16:11:38

标签: c#

我在一个MVC项目中工作并通过modelbinding在我的控制器中接收一个文件(HttpPostedFileBase属性),我想要的是删除我刚刚收到的文件名中的所有空格,为此我使用此

 var nombre_archivo = DateTime.Now.ToString("yyyyMMddHHmm.") +"_"+ (info.file.FileName.ToString()).Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);

但var“nombre_archivo”总是:201801240942.System.String []和我想要的是201801240942.nameOfFile,你能告诉我哪里出错了吗?

4 个答案:

答案 0 :(得分:2)

你正在分裂一系列点。

改为使用replace

var nombre_archivo = string.Format("{0}_{1}",
                         DateTime.Now.ToString("yyyyMMddHHmm."),
                         info.file.FileName.replace(" ", "")
);

此外,我们建议使用string.Format代替+连接。它更快更清晰

答案 1 :(得分:2)

var name = $"{DateTime.Now.ToString("yyyyMMddHHmm.")}_{info.file.FileName.Replace(" ", "")}";

答案 2 :(得分:2)

您可以使用String.Replace将空格替换为空字符串。该方法还有其他问题。它不会检查FileName是否有效,这意味着有人可以使用手写代码路径(如../../E:\somepath\myinnocentprogram.exe发出POST请求,以便将文件写入服务器&#39} ; s盘。或者更糟,../index.htm

更换空间并没有多大意义。它可以产生点和斜线

如果您选中Uploading a File (Or Files) With ASP.NET MVC,您会看到作者使用Path.GetFileName()仅检索文件的名称,然后将其保存在正确的文件夹中。您的代码应如下所示::

[HttpPost]
public ActionResult Index(HttpPostedFileBase file) {

  if (file.ContentLength > 0) {
    var fileName = Path.GetFileName(file.FileName)
                       .Replace(" ","");
    var finalName=String.Format("{0:yyyyMMddHHmm}._{1}",DateTime.Now,fileName);
    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), finalName);
    file.SaveAs(path);
  }

  return RedirectToAction("Index");
}

这确保只使用文件的文件名部分,并且文件保存在相应的文件夹中,即使有人发布了无效路径

答案 3 :(得分:-2)

这就是你应该如何解决问题

library(hms)
hms(56, 34, 12)
#> 12:34:56

编辑: 您应该使用string.Replace而不是使用Linq查询。 我没想到会出现格式问题。

所以,下面给出了正确的答案,但基本上,它看起来像:

string nombre_archivo = string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddHHmm."), info.file.FileName.Where(c => !Char.IsWhiteSpace(c))