【问题标题】:Trying to Create a Folder, but it creates in different location试图创建一个文件夹,但它在不同的位置创建
【发布时间】:2015-03-27 09:26:17
【问题描述】:

在我的ASP.NET WEbForms 应用程序中,我想创建一个文件夹并将文件保存在其中。在我的项目中,我有一个名为 CRMImages/Projects 的文件夹。我想在 Projects 文件夹中创建一个子文件夹并从中保存图像。目前我从 CRMImages/ 作为父文件夹检索图像。

这是我在代码隐藏中的代码:

                try
                {
                    string pathToCreate = "~/CRMImages/Projects/" + item.ProjectId;
                    string myFileName = "";
                    if (!Directory.Exists(Server.MapPath(pathToCreate)))
                    {
                        DirectoryInfo di = Directory.CreateDirectory(pathToCreate);
                        var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
                        var userName = user.Translate(typeof(System.Security.Principal.NTAccount));
                        System.Security.AccessControl.DirectorySecurity sec = di.GetAccessControl();
                        sec.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(userName,
                            System.Security.AccessControl.FileSystemRights.Modify,
                            System.Security.AccessControl.AccessControlType.Allow));
                        di.SetAccessControl(sec);
                        Directory.CreateDirectory(pathToCreate);

                        System.Diagnostics.Debug.WriteLine("FOLDER CREATED PATH : " + di.FullName);
                        myFileName = pathToCreate + "/projectLogo.png";
                        System.Diagnostics.Debug.WriteLine("PATH To Save Logo File & NAME : " + myFileName);

                        /*
                        if (File.Exists(item.ProjectLogoUrl) ) {
                            FileUpload projLogoUpload = new FileUpload();
                            if (projLogoUpload.HasFile) {
                                myFileName = pathToCreate + "/projectLogo.png";
                                projLogoUpload.SaveAs(myFileName);
                            }
                            // panFileBtn.SaveAs(filePath);
                        }  */
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine("EXCEPTION While SAving File : " + ex.Message + "\n *** STACK" + ex.StackTrace);
                }  

代码执行,但我没有看到在我的项目文件夹中创建的文件夹。假设 item.ProjectId 的值为“EMP3”,我在上面的代码执行中看到的日志是:

FOLDER CREATED PATH : C:\Program Files (x86)\IIS Express\~\CRMImages\Projects\EMP3
PATH To Save Logo File & NAME : ~/CRMImages/Projects/EMP3/projectLogo.png

我签入了IIS Express 文件夹并在那里创建了这个完整路径。你能说为什么它保存在 IISExpress 中以及如何在我的项目中已经存在的/CRMImages/Projects 文件夹中创建文件夹!!

非常感谢任何帮助。 谢谢

【问题讨论】:

    标签: asp.net webforms directory creation


    【解决方案1】:

    你必须替换下面的行

    DirectoryInfo di = Directory.CreateDirectory(pathToCreate);
    

    DirectoryInfo di = Directory.CreateDirectory(Server.MapPath(pathToCreate));
    

    【讨论】:

    • 哦,感谢 Dexterity 提供如此快速和正确的答案。您可以在上面的代码中看到我提到 Directory.CreateDirectory() 2 次 - 在设置安全性之前和之后。当我得到 UnAuthorized Exception 时,我从其他站点复制了上面的代码。那行需要写两次吗??
    • 请删除它。不需要两次。
    • 那我觉得还是把上面那个去掉比较好。你有什么建议?
    • 我的意思是在 di.SetAccessControl(sec); 旁边线。删除 Directory.CreateDirectory(pathToCreate);有什么理由再次创建相同的目录???
    • 是的。没错,但请确保您使用 Server.MapPath(pathToCreate) 而不是 pathToCreate 变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2022-12-17
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多