Tshumore Ответов: 1

Переименование файлов с помощью IIS express


У меня есть утилита для переименования файла в указанном каталоге с использованием определенного условия. Запуск кода с помощью консольного приложения работает хорошо, и файл переименовывается соответствующим образом. Однако, когда я пытаюсь сделать то же самое в веб - приложении, файл не переименовывается. Я использую сервер разработки VS2017 для отладки веб-приложения.

Что я упускаю?

Используя код консольного приложения как показано ниже файл успешно переименовывается :

Метод переименования:

public static string AddSuffix(string filename, string suffix)
       {
           string fDir = Path.GetDirectoryName(filename);
           string fName = Path.GetFileNameWithoutExtension(filename);
           string fExt = Path.GetExtension(filename);
           string renamedFilePath= Path.Combine(fDir, String.Concat(fName, suffix, fExt));
           return renamedFilePath;
       }


Использование в рабочей основной программе:

<pre>static void Main(string[] args)
        {
		 string batchperiod = "_70_";
            string realPath = @"C:\Users\myuser\source\repos\Solution\Project\BatchIn";
            IEnumerable<string> fileList = Directory.EnumerateFiles(realPath);

            var CurrentBatchName = (from file in fileList
                                    let fileName = Path.GetFileName(file)
                                    where fileName.Contains(batchperiod)
                                    select fileName).FirstOrDefault();

            string absolutePath = (@"C:\Users\myuser\source\repos\Solution\Project\BatchIn\" + CurrentBatchName);
            string newPath = Helpers.AddSuffix(absolutePath, String.Format("({0})", Helpers.parameters.IsProcessed));
 
            System.IO.FileInfo fi = new System.IO.FileInfo(absolutePath);
            if (fi.Exists)
            {
                fi.MoveTo(newPath);

            }
}


С помощью этого кода файл успешно переименовывается из
GL_Export_70_201907081058.xml
к
GL_Export_70_201907081058(P).xml


Единственное отличие использования веб - приложения заключается в том, что absolutePath хранится в переменной сеанса, полученной из предыдущей операции/ActionResult :

var absolutePath = (@"C:\Users\myuser\source\repos\Solution\Project\BatchIn\" + CurrentBatchName);
                   files.FileName = CurrentBatchName;
                   Session["AbsoluteBatchPath"] = absolutePath;


а позже вызывается в другом ActionResult как :
var sourceFile = Convert.ToString(Session["AbsoluteBatchPath"]);
                
                string newPath = AddSuffix(sourceFile, String.Format("({0})", parameters.IsProcessed));
              
                System.IO.FileInfo fi = new System.IO.FileInfo(sourceFile);
                 
                if (fi.Exists)
                {
                    // Move file with a new name. Hence renamed. 
                    fi.MoveTo(newPath);
                }


Что я уже пробовал:

Я пробовал использовать вариант перемещения файла, но он не может работать с классом FileInfo. Кто-нибудь может помочь в том, почему эта функция не работает в веб-приложении. Я подозреваю, что это может иметь какое-то отношение к IISExpess, который работает с Visual Studio.

Есть ли какие-либо разрешения, которые мне нужно изменить на уровне IISExpress?

Richard MacCutchan

Вы не имеете права ничего менять в клиенте из браузера. Хотите перейти на веб-сайт, который может переименовывать файлы по желанию в вашей системе?

Tshumore

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

_Asif_

Вероятно, вам нужно предоставить полные права доступа пользователю IIS_IUSRS

Gerry Schmitz

Почему вы получаете доступ к файлам "пользователя" (windows) на сервере? Веб-приложения используют "данные приложений" (папки) и / или базы данных.

Richard MacCutchan

Прочтите мой комментарий еще раз: браузеры не имеют права ничего менять в системе пользователя.

1 Ответов

Рейтинг:
2

Maciej Los

Я бы настоятельно рекомендовал прочитать это: Поддержка IIS во время разработки в Visual Studio для ASP.NET ядро | Microsoft Docs[^] и это: Опубликовать на IIS, импортировав настройки публикации - видео студии | Майкрософт документы[^]

Вы должны понимать (что уже было сказано в комментариях), что файлы accessig в режиме разработки и "производственном" режиме совершенно разные.