Как правильно закрыть поток .OpenText (). ReadLine (), поскольку я получаю «файл используется другими ошибками процесса» - PullRequest
0 голосов
/ 17 февраля 2012

Мне нужно прочитать строку в текстовом файле, который содержит имя изображения по умолчанию, а затем закрыть ReadLine (). То, как я пытаюсь закрыть его сейчас, бесполезно, и процесс не прекращается и вызывает ошибки «файл используется другим процессом» в другом месте программы, когда рассматриваемый текстовый файл необходимо перезаписать.

DirectoryInfo sourceDir = new DirectoryInfo(System.Web.HttpContext.Current.Request.MapPath("~/Content/ProductImages/" + Model.Products[i].ProductID.ToString() + "/thumbs/"));


               FileInfo[] defaultImage = sourceDir.GetFiles("defaultImage.txt");
               string defimg = defaultImage[0].OpenText().ReadLine();
               defaultImage[0].OpenText().Close();

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Если вы хотите прочитать первую строку:

using (var reader = defaultImage[0].OpenText())
{
    string defimg = reader.ReadLine();
}

или хотите прочитать все содержимое файла в строку:

string defimg = File.ReadAllText(defaultImage[0].FullName);
2 голосов
/ 17 февраля 2012

Вы закрываете поток, который открыли, вместо того, чтобы открывать другой поток, и закрываете его вместо этого ...

var stream = defaultImage[0].OpenText();
string defimg = stream.ReadLine();
stream.Close();

Или используя блок using:

string defimg;
using (stream = defaultImage[0].OpenText()) {
  defimg = stream.ReadLine();
}
0 голосов
/ 17 февраля 2012

defaultImage [0] .OpenText () Каждый раз создает новый StreamReader. Так что в вашем случае вы не закрываете тот, который открыли. Ниже должно работать.

var sr = defaultImage[0].OpenText();
            string str = x.ReadLine();
            sr.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...