Переименование файлов с помощью 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
Прочтите мой комментарий еще раз: браузеры не имеют права ничего менять в системе пользователя.