Файл.NET. Создайте, не может удалить файл впоследствии

Хорошо для начинающих, добавляющих MVC к проекту веб-форм, довольно просто, для получения функций в VS, 2008 для MVC берет немного больше работы (все еще легкий). Сначала Вы хотите быть уверенными, что Вы ссылаетесь на блоки и используете.Net 3.5. Второй можно создать папку контроллеров и папку представлений в текущем проекте веб-форм. Можно также создать простой контроллер с индексным действием. Затем установите/настройте маршруты в global.ascx файле. Вы должны быть установлены оттуда. Проверьте здесь для ссылки.

Однако Вы только сможете создать aspx страницы с кодом behinds (можно удалить их и ввести правильный класс наследования в разметку). На самом деле "преобразовать" Ваш тип проекта так, чтобы Вы получили совершенство MVC и Visual Studio (добавляют новое представление, goto контроллер, и т.д.) собирается взять некоторое проигрывание вокруг с. Мой лучший совет состоит в том, чтобы создать новый проект MVC в VS 2008 и новый проект веб-приложения и сравнить .csproj файлы в простом тексте. Существует значение длинной строки, которое говорит VS шаблон проекта.

Верят мне, это действительно работает. Я сделал это прежде на моих собственных проектах прежней версии. Я не помню, как я нашел тип проекта "ключом" помимо пробной версии/ошибки/устранения. ASP.NET MVC действительно играет по правилам в том же проекте как веб-формы.

ОБНОВЛЕНИЕ: я думаю, что можно измениться на тип проекта MVC, который является все еще веб-приложением при помощи их в PropertyGroup .csproj файла. Сравните тех, которые к тому, что Вы имеете и изменяете тот, которые являются differnt, убедиться копировать/копировать файл.

{B99EC98A-1F09-4245-B00D-5AF985190AA9}
{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}

Обновление 2: Вы не влияли бы на свой проект или повлияли бы на него очень. Если Вы - ООН, легкая об этом, делают резервное копирование и игру вокруг. При обнаружении с изменениями, у Вас всегда будет резервное копирование. Я был скептически настроен сначала, но был рад, что спустился по пути MVC.

12
задан John Saunders 28 February 2010 в 21:30
поделиться

6 ответов

JL,

Вы должны заключить вызов в .Create в оператор using, чтобы поток FileStream, возвращаемый .Create, был правильно закрыт. IE:

using (File.Create("path")){...}
28
ответ дан 2 December 2019 в 03:00
поделиться

Метод Create не только создает файл, он открывает его и возвращает объект FileStream, который можно использовать для записи в файл.

Вы должны закрыть файл после себя, иначе он не будет закрыт до того, как сборщик мусора очистит объект FileStream.

Самый простой способ - просто закрыть файл, используя ссылку, которую возвращает метод Create:

File.Create(fileName).Close();
15
ответ дан 2 December 2019 в 03:00
поделиться

nikmd23 имеет короткий ответ, длинный ответ: FileStream , возвращаемый File.Create (...) , не является детерминированным утилизирован, поэтому дескриптор файла не закрывается, когда вы пытаетесь его удалить.

Как выразился nikmd23, упаковка вашего вызова File.Create (...) с помощью оператора using обеспечит закрытие и удаление потока:

using (FileStream fs = File.Create(path)) { 
  // do anything with the stream if need-be...
}
File.Delete(path); //after it's been disposed of.

Блок using (...) на самом деле просто сахар компилятора для:

FileStream fs = File.Create(path);
try { 
   // do anything with the stream if need-be...
}
finally { 
  fs.Dispose();
}
File.Delete(path)
12
ответ дан 2 December 2019 в 03:00
поделиться

Вы должны использовать ответ nikmd23 почти во всех случаях. Если вы не можете , потому что вам нужно передать FileStream где-то еще, обязательно вызовите метод FileStream.Close . Желательно, чтобы у вас был класс, который «владеет» реализацией FileStream IDisposable и закрывает поток в его методе Dispose .

Дополнительные сведения о реализация IDisposable , см. документацию MSDN . Легче читать и обновлять сообщение Джо Даффи по этой теме.

1
ответ дан 2 December 2019 в 03:00
поделиться

См. Система. IO.File.Create (String) Метод описание параметра и возвращаемого значения

Параметры

путь Тип: System.String Путь и имя создаваемого файла.

Возвращаемое значение

Тип: System.IO.FileStream

A FileStream , который обеспечивает доступ для чтения / записи к файлу, указанному в путь.

Возвращаемое значение FileStream предназначено для доступа ввода-вывода к созданному файлу. Если вас не интересует запись (или чтение) вновь созданного файла, закройте поток . Это то, что обеспечивает , использующий блок.

0
ответ дан 2 December 2019 в 03:00
поделиться
using(FileStream f = File.Create(file_path))
{
  // ... do something with file
  f.Close();
}

Функция «f.Close ();» строка закрытия файла немедленно. Если не закрыть вручную, утилизация может не закрыть его.

1
ответ дан 2 December 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: