C#: переименование файла с использованием ASP: NET MVC и IISExpress - PullRequest
1 голос
/ 22 января 2020

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

1 Ответ

0 голосов
/ 22 января 2020

Ваш код видится безупречно, его нет, отладьте и проверьте, введен ли в MVC ваш код fi.exist, если условие ..

Пожалуйста, подтвердите то же самое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...