У меня есть утилита для переименования файла в указанном каталоге с использованием определенного условия. Запуск кода с использованием консольного приложения работает хорошо, и файл соответствующим образом переименовывается. Однако, когда я пытаюсь сделать то же самое в веб-приложении, файл не переименовывается. Я использую VS2017 Development Server для отладки веб-приложений.
Что мне не хватает?
Используя код консольного приложения, как показано ниже, файл успешно переименовывается:
Метод переименования:
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;
}
Использование в Основная программа:
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
Единственное отличие при использовании веб-приложения заключается в том, что 1019 * хранится в переменной Session .. она получена из предыдущей операции / 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);
}
Чего мне не хватает?
Я подозреваю, что есть некоторые разрешения, которые мне может понадобиться настроить при попытке переименования с помощью Visual Studio Development Server.