Я решаю это с помощью Jsoup.
Document doc = Jsoup.connect(url)
.data("__EVENTTARGET","ctl00$ContentPlaceHolder1$btnSend")
.data("__EVENTARGUMENT:","")
.data("q", "")
.data("ctl00$ContentPlaceHolder1$txtQuery1", delno)
.post();
Я думаю, что это немного похоже на запрос в скрапе.
Надеюсь, это может помочь кому-то в замешательстве.
Проблема в том, что во втором примере вы открываете дескриптор файла, от которого никогда не избавлялись, поэтому при втором вызове метода он вызовет описываемое вами исключение. Первый фрагмент является предпочтительным способом (вы можете удалить бит file_stream.Close () - он будет автоматически вызываться Stream.Dispose ()).
Если у вас не было оператора using, но вы сохранили закрытие, все было бы в порядке.
[Edit: добавлена попытка ... наконец, спасибо, cheeso]
var serializer = new XmlSerializer(typeof(PasswordManager));
FileStream fs;
try
{
fs = File.Create("users.xml");
serializer.Serialize(fs, this);
}
finally
{
fs.Close(); // or fs.Dispose()
}
В этом случае, однако, Dispose предпочтительнее, потому что он знает все действия, которые необходимо предпринять для очистки, включая close (и все остальное).
Вы должны сериализовать в блоке try finally , чтобы можно было убедиться, что файл закрыт / удален независимо от успеха или неудачи. Вот что делает для вас ключевое слово using .
var serializer = new XmlSerializer(typeof(PasswordManager));
var fs = File.Create("users.xml");
try { serializer.Serialize(fs,this); }
finally { fs.Close(); }
File.Create должен быть размещен вне блока try, как показано в моем предыдущем ответе. Если вы поместите его в блок try, вам необходимо проверить fs на наличие нулевой ссылки перед закрытием. Ниже показан исправленный код, но мой первый ответ намного лучше, поскольку вы можете избежать этой проверки.
serializer = new XmlSerializer(typeof(PasswordManager));
FileStream fs;
try
{
fs = File.Create("users.xml");
serializer.Serialize(fs, this);
}
finally
{
if (fs != null) // in case File.Create fails
fs.Close(); // or fs.Dispose()
}