Пытаюсь создать папку, но она создается в другом месте

В моем приложении ASP.NET WEbForms я хочу создать папку и сохранять в ней файлы. В моем проекте у меня есть папка с именем CRMImages/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, которая уже существует в моем проекте !!

Любая помощь высоко ценится. Спасибо


person Tvd    schedule 27.03.2015    source источник


Ответы (1)


Вы должны заменить строку ниже

DirectoryInfo di = Directory.CreateDirectory(pathToCreate);

С

DirectoryInfo di = Directory.CreateDirectory(Server.MapPath(pathToCreate));
person Keval Gangani    schedule 27.03.2015
comment
О, спасибо Ловкость за столь быстрый и правильный ответ. Вы можете видеть, что в моем коде выше я упоминаю Directory.CreateDirectory() 2 раза - до и после настройки безопасности. Поскольку я получал UnAuthorized Exception, я скопировал приведенный выше код с другого сайта. Эту строку нужно писать дважды?? - person Tvd; 27.03.2015
comment
Пожалуйста, удалите его. два раза не надо. - person Keval Gangani; 27.03.2015
comment
Тогда лучше удалить тот, что выше, я думаю. Что ты посоветуешь ? - person Tvd; 27.03.2015
comment
О нет, нет, di.SetAccessControl(sec); нужна DirectoryInfo, которая находится в первом! - person Tvd; 27.03.2015
comment
Я имею в виду рядом с di.SetAccessControl(sec); линия. Удалить Directory.CreateDirectory(pathToCreate); любая причина для создания того же каталога снова ??? - person Keval Gangani; 27.03.2015
comment
Большое спасибо. Еще одна вещь, в закомментированном коде я пытаюсь сохранить файл, выбранный FileUpload, под другим именем. Я имею в виду, что выбран файл C:\....\Desert.jpg, и я хочу сохранить его как projectLogo.jpg в моей созданной папке. Тогда это правильный код. Я обязательно сделаю SaveAs(Server.MapPath(myFileName)) . Но сохранит ли код его как другое имя?? - person Tvd; 27.03.2015
comment
Да. Это верно, но убедитесь, что вы используете Server.MapPath(pathToCreate) вместо переменной pathToCreate. - person Keval Gangani; 27.03.2015
comment
Да, сделали эту модификацию. Я отмечаю это как ответ, можете ли вы попытаться взглянуть на эту тему и помочь мне с этим также - stackoverflow.com/questions/29281037/ - person Tvd; 27.03.2015