2014-10-08 47 views
0

我有100个属性的列表。如果我有成千上万的记录,我的应用程序将在写入文本文件时挂起。写入到文本文件使用列表

那么写入文本文件有没有简单快捷的方法。

任何帮助表示赞赏。

在此先感谢

+0

你是怎么写你的文件的?请附上您的代码,以便我们了解如何为您提供帮助。 – Jhon 2014-10-08 19:17:23

+0

使用(_streamWriter =新的StreamWriter(文件路径(Constants.Data,文件名))) { 如果(_myList = NULL && _myList.Count> 0!) { _streamWriter.Write(_textFileHeader.DataColumnHeader(COLUMNNAMES));的foreach (_mylist中的字符串子列表) {_streamWriter.Write(sublist.Name);} – Channakeshav 2014-10-08 19:29:13

+0

我已经使用FileStream和StreamWriter来编写文件,因为我有100个属性,我需要编写100行代码才能将每个文本写入文本file.Is有简单的方法吗? – Channakeshav 2014-10-08 19:31:40

回答

0

你应该把所有的工作负载异步,这样你不要滥用/过载主线程,并保持你的应用程序/ UI响应。你可以这样管理它:

protected void buttonSaveClick(sender object, EventArgs e) //Assuming you call your save from a button 
{ 
    string filePath = FilePath(Constants.Data, filename)); 
    StringBuilder sb = new StringBuilder(); 

    foreach(var sublist in _mylist) 
    { 
     //This will loop only through object's public properties 
     foreach(var prop in sublist.GetType().GetProperties()) 
      if(prop.CanRead) 
       sb.AppendLine(prop.GetValue(sublist, null)); 
    } 

    buttonSaveClick.Enabled = false; //Disable the UI so the user can't cause an error clicking again 

    try 
    { 
     await WriteTextAsync(filePath, _textFileHeader.DataColumnHeader(columnnames)); 
     await WriteTextAsync(filePath, sb.ToString()); 
    } 
    catch(Exception ex) 
    { 
     buttonSave.Enabled = true; //Enable UI again on error 
     //Log and/or show error to user 
    } 

    buttonSave.Enabled = true; //Enable UI again on success 
} 

private async Task WriteTextAsync(string filePath, string text) 
{ 
    byte[] encodedText = Encoding.Unicode.GetBytes(text); 

    using (FileStream sourceStream = new FileStream(filePath, 
     FileMode.Append, FileAccess.Write, FileShare.None, 
     bufferSize: 4096, useAsync: true)) 
    { 
     await sourceStream.WriteAsync(encodedText, 0, encodedText.Length); 
    }; 
} 
+0

感谢您的帮助,但是如果我有100个proeprties,我将需要编写100行代码,是否有更好的方式一次访问属性valuse? – Channakeshav 2014-10-08 21:34:41

+0

你的属性/对象的属性是如何定义的? – Jhon 2014-10-08 21:37:45

+0

我正在使用实体框架,并定义所有属性并让它们列表然后循环使用 – Channakeshav 2014-10-08 22:10:44