我有一个ASP.NET MVC应用程序,托管在IIS 8,Windows Server 2012上,我将一些文件上传到临时目录。完成其他工作后,所有这些文件都将移动到具体目录。我的问题是为什么Directory.Move
工作时不会FileInfo.CopyTo
工作。
Directory.Move
失败
"访问路径' serverPath ...'被拒绝。"
代码I用于移动整个目录:
var pathFrom = Server.MapPath("~/Uploads/Objects/" + tempFolderName); //tempFolderName is a random generated GUID.
var pathTo = Server.MapPath("~/Uploads/Objects/" + ObjectId); //ObjectId is an integer
if (Directory.Exists(pathFrom))
{
Directory.Move(pathFrom, pathTo);
}
要创建一个临时目录,我只需调用:Directory.CreateDirectory(path)
,它可以工作并创建临时目录,文件也保存在其中。
我用来逐个复制文件的方法:
public static void DirectoryCopy(string strSource, string Copy_dest)
{
DirectoryInfo dirInfo = new DirectoryInfo(strSource);
DirectoryInfo[] directories = dirInfo.GetDirectories();
FileInfo[] files = dirInfo.GetFiles();
foreach (DirectoryInfo tempdir in directories)
{
Console.WriteLine(strSource + "/" + tempdir);
Directory.CreateDirectory(Copy_dest + "/" + tempdir.Name);// creating the Directory
var ext = System.IO.Path.GetExtension(tempdir.Name);
if (System.IO.Path.HasExtension(ext))
{
foreach (FileInfo tempfile in files)
{
tempfile.CopyTo(Path.Combine(strSource + "/" + tempfile.Name, Copy_dest + "/" + tempfile.Name));
}
}
DirectoryCopy(strSource + "/" + tempdir.Name, Copy_dest + "/" + tempdir.Name);
}
FileInfo[] files1 = dirInfo.GetFiles();
foreach (FileInfo tempfile in files1)
{
tempfile.CopyTo(Path.Combine(Copy_dest, tempfile.Name));
}
}
我试图让Directory.Move
工作:
pathTo
是否不存在IISAppPool/DefaultAppPool
具有对Uploads文件夹的完全访问权限。任何人都能解释为什么Directory.Move
无法正常工作(带有访问拒绝错误),同时逐个移动文件有效吗?
Directory.Move
是否需要更多权限,而不仅仅是逐个复制文件?
请注意,该应用程序不在wwwroot ...但在其他驱动器上。
我已阅读的页面:
IOException access denied when Directory.Move subfolder and parent folder
修改
使用FileInfo.Copy
复制文件后,我删除了带有Directory.Delete(pathFrom, true);
的tempFolder,这也适用。