Ошибки StreamWriter и FileStream при создании файла - PullRequest
0 голосов
/ 09 ноября 2019

У меня в контроллере есть SaveResult, настроенный для использования StreamWriter. Код работает отлично, для сохранения в файл, который существует.

Сохранить действие

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Save(string fileName,  string startTemplateUrl, string html)
    {
        string directoryname = Path.GetDirectoryName(fileName);
        string filename = Path.GetFileName(fileName);
        var lines =  html;
        var helper = (Server.MapPath(directoryname));
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(helper, filename)))
        {
            outputFile.WriteLine(lines);
            return View();
        }

    }

Сейчас я работаю над созданием файла, и из того, что я прочитал, вы можете сделать это с StreamWriterхотя, когда я пытаюсь реализовать это, он говорит, что это не может быть найдено. Что говорит мне, что он ищет файл, а не создает его.

Поэтому я попытался реализовать это с помощью FileInfo. Кажется, у него есть все, что нужно, но он просто не сохраняется. Ниже мой последний код. Это не похоже на

fs.Write(lines);

У меня был блок try catch. на этом и он имел одинаковые результаты. То, что это не может найти это.

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Create (string fileName, string startTemplateUrl, string html)
    {
        string directoryname = Path.GetDirectoryName(fileName);
        string filename = Path.GetFileName(fileName);
        var lines = html;
        var helper = (Server.MapPath(directoryname));
        var file = "Test\\" + filename;
        var pathString = System.IO.Path.Combine(helper, "Test\\", filename);
        FileInfo fi = new FileInfo(pathString);

            if (fi.Exists)
            {
                fi.Delete();
            }
            using (FileStream fs = fi.Create())
            {
                fs.Write(lines);
                return View();
            }

    }

Спасибо за вашу помощь!

Обновление:

Это сообщение, которое я получаю. Ниже сообщения у меня есть фактическая строка в каталог, скопированный из проводника папок ..

Exception thrown: 'System.IO.DirectoryNotFoundException' in mscorlib.dll
An exception of type 'System.IO.DirectoryNotFoundException' occurred in mscorlib.dll but was not handled in user code
Could not find a part of the path 'C:\Users\Scott\source\repos\HMIBuilder\HMIBuilder\Files\HMIBuider\Test\Test2.html'.

C:\Users\Scott\source\repos\HMIBuilder\HMIBuilder\Files\HMIBuilder\Test

Обновление:

Мне нужно посмотреть на мой код лучше! Это исправлено .. Код в самом верху отлично работает как для сохранения, так и для создания. Проблема была в переменных кода javascript, которые я кормил. Опечатка ... Если вы посмотрите на приведенное выше сравнение, которое я не уловил, слишком много долгих ночей, я полагаю, HMIBuilder пишется как HMIBuider ... в ошибке.

1 Ответ

0 голосов
/ 09 ноября 2019
using (StreamWriter outputFile = new StreamWriter(Path.Combine(path, "filename.txt")))

создаст новый файл, если потребуется.

Возможно, ваша проблема в каталоге Test, а CreateDirectory здесь, чтобы помочь.

DirectoryInfo di = Directory.CreateDirectory(path);

Если мы поместим запись в файл и создадим каталоги вместе, это может выглядеть следующим образом:

var path = "./MyFiles/SpecialFiles";
var filename = "thisIsAVerySpecialFile.txt";
Directory.CreateDirectory(path);
//Create a new file or overwrite existing (i.e. *not* append)
using (var f = new StreamWriter(Path.Combine(path, filename)))
{
    f.WriteLine("Hello world!");
}

Без Directory.CreateDirectory код приводит к System.IO.DirectoryNotFoundException с 'Could not find a part of the path '(...)'.

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