Проблема из-за несоответствия между _layouts/home.html
и темой. Макет требует трех включений, которые не существуют ни в вашем хранилище, ни внутри jekyll-theme-minimal
.
Решение состоит в том, чтобы либо удалить пользовательский макет, либо добавить три включения в свой репозиторий.
Да, StreamReader.Dispose
закрывает базовый поток (для всех общедоступных способов создать один). Однако существует более хорошая альтернатива:
using (TextReader reader = File.OpenText("file.txt"))
{
}
Это обладает дополнительным преимуществом, что оно открывает базовый поток с подсказкой к Windows, что Вы будете получать доступ к нему последовательно.
Вот тестовое приложение, которое показывает первую версию, работающую на меня. Я не пытаюсь сказать, что это - доказательство чего-либо в особенности - но я хотел бы знать, как хорошо оно работает на Вас.
using System;
using System.IO;
class Program
{
public static void Main(string[] args)
{
for (int i=0; i < 1000; i++)
{
using(StreamReader sr = new StreamReader
(File.Open("somefile.txt", FileMode.Open)))
{
Console.WriteLine(sr.ReadLine());
}
File.Move("somefile.txt", "somefile.bak");
File.Move("somefile.bak", "somefile.txt");
}
}
}
Если это работает, это предполагает, что это - что-то, чтобы сделать, с каким Вы делаете при чтении...
И теперь вот сокращенная версия Вашего отредактированного кода вопроса - который снова хорошо работает для меня, даже на сетевом ресурсе. Обратите внимание, что я изменился FileMode.Create
кому: FileMode.CreateNew
- как иначе, возможно, все еще было приложение с дескриптором на старом файле, потенциально. Это работает на Вас?
using System;
using System.IO;
public class Test
{
static void Main()
{
StreamWriter creditsFile = new StreamWriter(File.Open("test.txt",
FileMode.CreateNew));
creditsFile.WriteLine("code\\inc");
creditsFile.Close();
creditsFile.Dispose();
File.Move("test.txt", "test2.txt");
}
}
Отметьте - Ваши блоки использования не должны быть вложены в их собственных блоках - они могут быть последовательными, как в:
using(FileStream fs = File.Open("somefile.txt", FileMode.Open))
using(StreamReader sr = new StreamReader(fs))
{
//read file
}
Порядок распоряжения в этом случае является все еще тем же как вложенными блоками (т.е., StreamReader все еще расположит перед FileStream в этом случае).
Есть ли возможность, что что-то еще имеет блокировку к somefile.txt?
Простая проверка от локального (в файл) cmd строка
net files
может дать Вам некоторый ключ к разгадке, если что-либо еще имеет блокировку.
Кроме того, можно заставить что-то как FileMon брать еще больше деталей и проверять, что приложение выпускает правильно.
Я попытался бы использовать FileInfo.Open()
и FileInfo.MoveTo()
вместо File.Open()
и File.Move(
). Вы могли также попытаться использовать FileInfo.OpenText()
. Но это просто предложения.
Так как это, кажется, не проблема кодирования, я собираюсь надеть свою syadmin шляпу и предложить несколько предложений.
Править: Если можно застать его на месте от машины сервера, то Дескриптор Sysinternal скажет Вам, что имеет его открытый.