我目前正在使用asp和c#开发一个网站。其中一个页面允许注册用户上传文件。根据登录的用户存储这些文件。当用登录名和id命中上载时,将创建一个目录。
string userDirectory = "\\Test\\Files\\ " + User.Identity.Name + " " + User.Identity.GetUserId();
if (!Directory.Exists(userDirectory))
{
Directory.CreateDirectory(userDirectory);
}
创建目录时没有问题,文件也会上传。然而,我现在面临的问题是,如果文件中已经存在日期戳,我试图在文件中添加日期戳,这样我就不会覆盖它。请参阅以下代码
string fileName = Path.Combine(userDirectory, FileUpload1.FileName);
if (!File.Exists(fileName))
{
FileUpload1.SaveAs(fileName);
}
else
{
fileName = string.Concat(
Path.GetFileNameWithoutExtension(fileName),
DateTime.Now.ToString("_yyyy_MM_dd_HH:mm:ss"),
Path.GetExtension(fileName)
);
FileUpload1.SaveAs(fileName);
}
这一直给我一个错误:
System.Web.HttpException: The SaveAs method is configured to require a rooted path, and the path 'Test.docx' is not rooted
有谁知道我哪里出错了?提前致谢
答案 0 :(得分:4)
您必须将目录名称附加到路径,因为您已将其剥离(使用GetFileNameWithoutExtension
):
string newFileName =
Path.Combine( Path.GetDirectoryName(fileName)
, string.Concat( Path.GetFileNameWithoutExtension(fileName)
, DateTime.Now.ToString("_yyyy_MM_dd_HH_mm_ss")
, Path.GetExtension(fileName)
)
);
另请注意,不支持在文件名中使用:
,因此我将其替换为_
。