C# 信息未写入文本文件

C# 信息未写入文本文件,c#,file-io,C#,File Io,出于某种原因,此方法返回的文件中包含零字节。它应该创建一个文件并返回一个列表。它将返回控制台,但不会写入文件 这是电话 data.GetStationIDs ("BoulderStations.txt", lat, lon); 这里是方法 public List<string> GetStationIDs (string filename, string lat, string lon) { //specify file name, instructions, a

出于某种原因,此方法返回的文件中包含零字节。它应该创建一个文件并返回一个列表。它将返回控制台,但不会写入文件

这是电话

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);
公共列表getStationID(字符串文件名、字符串lat、字符串lon){
//指定文件名、说明和权限
FileStream CurrentDataFile=新FileStream(文件名,FileMode.OpenOrCreate,FileAccess.Write);
//创建要写入文件的新流
StreamWriter CurrentData=新的StreamWriter(CurrentDataFile);
List StationIDList=新列表();
字符串url=@“http://api.wunderground.com/api/“+wundergroundkey+”/geolookup/q/“+lat+”,“+lon+”.json”;
Uri=新的Uri(url);
WebRequest WebRequest=WebRequest.Create(uri);
WebResponse=webRequest.GetResponse();
StreamReader StreamReader=新的StreamReader(response.GetResponseStream());
String responseData=streamReader.ReadToEnd();
var container=JsonConvert.DeserializeObject(responseData);
foreach(集装箱内的var pws。位置。附近的气象站。pws。站){
CurrentData.Write(pws.id+“”+pws.lat+“”+pws.lon);
}
foreach(集装箱内的var pws。位置。附近的气象站。pws。站){
StationIDList.Add(pws.id);
}
返回(站点列表);
我有另一种方法,同样的方法很好

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 + "/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!");
public void GetFiveMinuteData(列表StationId列表、字符串日期、字符串文件名){
//指定文件名、说明和权限
FileStream CurrentDataFile=新FileStream(文件名,FileMode.OpenOrCreate,FileAccess.Write);
//创建要写入文件的新流
StreamWriter CurrentData=新的StreamWriter(CurrentDataFile);
foreach(StationID列表中的字符串StationID){
字符串url=@“http://api.wunderground.com/api/“+wundergroundkey+”/history_“+Date+”/q/pws:“+StationID+”.json”;
Uri=新的Uri(url);
WebRequest WebRequest=WebRequest.Create(uri);
WebResponse=webRequest.GetResponse();
StreamReader StreamReader=新的StreamReader(response.GetResponseStream());
字符串responseData=streamReader.ReadToEnd();
var container=JsonConvert.DeserializeObject(responseData);
foreach(容器中的var观测值。历史记录。观测值){
CurrentData.Write(StationID+“”+日期+“”);
//这样可以更容易地获取日期。虽然不完美,但更好。
DateTime日期=observation.date.Value;
日期时间utc=observation.utcdate.Value;
//无论你想对每个观察做什么
如果(date.Minute==0 | | date.Minute%5==0){
CurrentData.Write(date.Hour+“:“+date.Minute+”“+observation.wdird+”“+observation.wspdi);
}//如果结束
CurrentData.Write(“\n”);
}//每次观察结束
}//每站结束
Console.WriteLine(“当前数据文件完成!”);
这些行

//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);
你没有做你期望他们做的事情。你从未向文件写入任何内容,也从未刷新流。除此之外,你的代码缺少使用语句的适当的
。如果你想继续使用流读取器/写入类,请查看msdn上的文档,他们有一些你根本没有遵循的好例子

另一个选择是简化您的问题并使用以下方法:

 File.WriteAllText(aStringWithDataThatIwantInTheFile);

 string fileContents = File.ReadAllText(@"C:\thefilepath.txt");

 string[] fileLines = File.ReadAllLines(AStringWithMyFilePath);

 File.WriteAllLines(AStringArrayGoesHere);

很抱歉,我将使用您当前的代码,但这没有多大意义,因为我必须完全重写该方法,我不知道您实际希望写入文件的数据是什么,因为您从来没有实际告诉
StreamWriter
您分配来写入任何内容,您只需分配它,然后继续执行其他操作事情。

这很奇怪,我在另一个方法中使用了相同的代码,它工作得很好。我将更新帖子以显示另一个方法。@WillLuce您的另一个方法工作的事实并不能使代码更加正确。请查看msdn上的示例,阅读
IDisposable
如果您愿意
Str,请使用
语句eamWriter
实现
IDisposable
,这意味着您需要在using语句中进行分配(推荐)或者自己显式地调用
Dispose
方法。事实上,一开始我没有注意到你的
Write
调用,所以你至少在尝试写,但你仍然从未刷新流或处理它。