2015-09-22 4 views
0

Я работаю над проектом, который представляет собой серию изображений, которые хранятся в одной области памяти (скажем, с помощью карты памяти или загрузки) и распределяет их по их соответствующие папки на основе имени изображения - которые должны соответствовать именам файлов в их соответствующей папке.C# - Доступ к пути запрещен, не удается получить доступ к файлам

У меня есть первые несколько функций кода, написанных для того, чтобы это произошло, и решил проверить его, изменив код, чтобы он выполнял процесс в коллекции файлов в папке «Мои рисунки». Что должно было произойти, так это то, что каждый файл в папке был скопирован в папку AppData под названием «Новые изображения» и добавлен в соответствующий подкаталог или при необходимости создала подкаталог.

Это породило ошибку, указав, что доступ к C:\Users\mark, хотя он не объяснил, почему и что с этим делать. Я подумал, что это может быть проблемой при доступе к папке «Мои рисунки», поэтому я скопировал изображения в папку «Тестирование изображений» внутри папки AppData (так что теперь программа будет просто передавать файлы между двумя папками в AppData). Произошла одна и та же ошибка, и я не знаю, что делать дальше, я много раз пишу и читаю из файлов в AppData и никогда не сталкивался с этой проблемой. Я также читал различные записи, связанные с этим на этом форуме, но, похоже, не в состоянии получить окончательный ответ с точки зрения того, что делать дальше!

код, который вызывает исключение можно увидеть ниже:

//main folder (Contains sub-folders for each patient) 
    string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\New Images"; 
    //variables for sub-directories cannot be given at this point as they are created using a part of the image name 
    string subDirectory; 
    //string subDirectory = Path.Combine(rootDirectory, imageName.Split('_')[0]); 
    string imageName; 
    //string imageName = Path.GetFileName(image) 
    string shortcutDirectory; 
    //string shortcutDirectory = My Documents + Subfolder name + file name 
    //list to hold all strings as bitmap image 
    List<Bitmap> images = new List<Bitmap>(); 

    public void createDirectory() 
    { 
     //create filing construct for all files passed in from machines 

     //if main folder does not exist in AppData 
     if (!Directory.Exists(rootDirectory)) 
     { 
      //create it 
      Directory.CreateDirectory(rootDirectory); 
     } 
    } 

    public void saveLatestImages() 
    { 
     //specific path for My Pictures only 
     string testImagesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Test Images"; 
     //if there is a Pictures folder 
     if (Directory.Exists(testImagesPath)) 
     { 
      //get number of files in folder 
      int fileCount = Directory.GetFiles(testImagesPath).Count(); 

      //more than one file in folder 
      if (fileCount > 0) 
      { 
       //create data structures to store file info 
       //filePaths holds path of each file represented as a string 
       string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Test Images"); 

       //for each file in Pictures... 
       for (int index = 0; index < fileCount; ++index) 
       { 
        //get name of image at current index 
        imageName = filePaths[index]; 
        //separate the part relating to the patient name (everything before (DD/MM/YYYY)) 
        string subSpecifier = imageName.Split('_')[0]; 
        //add to root directory to form subfolder name 
        subDirectory = Path.Combine(rootDirectory, subSpecifier); 

        //subdirectory name formulated, check for pre-existing 
        //subfolder does not exist 
        if(!Directory.Exists(subDirectory)) 
        { 
         //create it 
         Directory.CreateDirectory(subDirectory); //ERROR OCCURS 
        } 
        //otherwise, file will be added to existing directory 

        //take everything from end and folder\file division to get unique filename 
        string fileName = imageName.Split('\\').Last(); 
        //add this to the existing subDirectory 
        fileName = Path.Combine(subDirectory, fileName); 

        //copy the image into the subfolder using this unique filename 
        File.Copy(imageName, fileName); 

        //add full filename to list of bitmap images 
        images.Add(new Bitmap(fileName)); 

        //update the shortcut to the file in the image storage shortcut folder 
        shortcutDirectory = getShortcut(subSpecifier, fileName); 

        //delete image at original path (clear folder so images not copied on next load up) 
        //File.Delete(imageName); 
       } 
      } 
     } 
    } 

Любая помощь в том, где искать следующий будет весьма признателен!

Благодаря Все

+0

Вы добавили разрешения для требуемой папки i.e. C: \ Users \ mark? –

+0

Я понятия не имею, поскольку я сказал, что я новичок в этой ошибке, поэтому я даже не подумал бы что-либо, чтобы противодействовать ей перед рукой! Как я могу добавить разрешения? @AmitSoni – marcuthh

ответ

1

Это веб-приложение ASP.net? В этом случае вы можете попытаться предоставить разрешение на запись учетной записи IIS_IUSRS.

Уловка для решения этой проблемы - олицетворение ASP.net.

Не предоставляйте полные права и не запускайте свое приложение в качестве администратора. Тогда у пользователей будут права администратора, и я уверен, что вы захотите этого избежать.

+0

Привет, это звучит здорово и очень полезно. Как я уже говорил в проблеме, я новичок в этой ошибке и не имею в виду, что она может потребоваться, чтобы внести изменения, которые вы предложили. Знаете ли вы ссылку или прохождение, которые могли бы помочь мне? – marcuthh

+0

@marcuthh. Подобное обсуждение в. Может быть, это то, что вы ищете? http://stackoverflow.com/questions/14653722/how-do-i-give-asp-net-permission-to-write-to-a-folder-in-windows-7 –

+0

http: //forums.iis. net/t/1162412.aspx? Настройка IIS + + для + ASP + NET + запись + может также оказаться полезной. –

1

За время время дать полные права каждого на папку и попробуйте запустить приложение в качестве администратора.

Если это сработает, вы можете соответственно изменить разрешения на свою папку. Также убедитесь, что ваша папка не только на чтение.

+0

Я попробую это для фазы тестирования, спасибо за ваш вклад! – marcuthh

 Смежные вопросы

  • Нет связанных вопросов^_^