По какой-то причине этот метод возвращает файл с нулевыми байтами. Он должен создать файл и вернуть список. Он вернется на консоль, но не будет записываться в файл.Информация не записывается в текстовый файл
Вот на вызов
data.GetStationIDs ("BoulderStations.txt", lat, lon);
и вот метод
public List<string> GetStationIDs (string filename, string lat, string lon) {
//specify file name, instructions, and priveleges
FileStream CurrentDataFile = new FileStream (filename, FileMode.OpenOrCreate, FileAccess.Write);
//create a new stream to write to the file
StreamWriter CurrentData = new StreamWriter (CurrentDataFile);
List<string> StationIDList = new List<string>();
string url = @"http://api.wunderground.com/api/" + wundergroundkey + "/geolookup/q/" + lat + "," + lon + ".json";
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse response = webRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
String responseData = streamReader.ReadToEnd();
var container = JsonConvert.DeserializeObject<HistoryResponseContainer>(responseData);
foreach (var pws in container.location.nearby_weather_stations.pws.station) {
CurrentData.Write (pws.id + " " + pws.lat + " " + pws.lon);
}
foreach (var pws in container.location.nearby_weather_stations.pws.station) {
StationIDList.Add(pws.id);
}
return (StationIDList);
У меня есть другой способ, в котором тот же подход работает отлично.
public void GetFiveMinuteData(List<String> StationIDList, String Date, String Filename) {
//specify file name, instructions, and priveleges
FileStream CurrentDataFile = new FileStream (Filename, FileMode.OpenOrCreate, FileAccess.Write);
//create a new stream to write to the file
StreamWriter CurrentData = new StreamWriter (CurrentDataFile);
foreach (String StationID in StationIDList) {
string url = @"http://api.wunderground.com/api/" + wundergroundkey + "/history_" + Date + "https://stackoverflow.com/q/pws:" + StationID + ".json";
Uri uri = new Uri (url);
WebRequest webRequest = WebRequest.Create (uri);
WebResponse response = webRequest.GetResponse();
StreamReader streamReader = new StreamReader (response.GetResponseStream());
String responseData = streamReader.ReadToEnd();
var container = JsonConvert.DeserializeObject<HistoryResponseContainer> (responseData);
foreach (var observation in container.history.observations) {
CurrentData.Write (StationID + " " + Date + " ");
// This makes easier access to the date. not perfect, but better.
DateTime date = observation.date.Value;
DateTime utc = observation.utcdate.Value;
// whatever you want to do with each observation
if (date.Minute == 0 || date.Minute % 5 == 0) {
CurrentData.Write (date.Hour + ":" + date.Minute + " " + observation.wdird + " " + observation.wspdi);
}//end if
CurrentData.Write ("\n");
} //End foreach observation
} //end foreach station
Console.WriteLine ("CurrentDataFile complete!");
Это странно, я использую тот же код в другом методе, и он работает нормально. Я обновлю сообщение, чтобы показать другой метод. –
@WillLuce факт, что ваш другой метод работает, не делает код более правильным. Посмотрите пример на msdn и прочитайте инструкции 'IDisposable' и' using', если вы хотите http://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110) .aspx 'StreamWriter' реализует' IDisposable', что означает, что вам нужно либо выделить внутри оператора using (что рекомендуется), либо явно вызвать метод 'Dispose' самостоятельно. На самом деле, я фактически не заметил ваши звонки «Write», поэтому вы, по крайней мере, пытаетесь написать, но вы все равно никогда не очищаете поток или не распоряжаетесь им. – evanmcdonnal
Получил это. Спасибо. –