所以我正在做一个我在配置文件中读取的项目.配置文件只是一个字符串列表,如"D 1 1","C 2 2"等.现在我还没有在C#中进行过读/写操作,所以我在网上查找了它,期待找到某种类型的再现C/C++ .eof().我找不到一个.
所以我拥有的是......
TextReader tr = new StreamReader("/mypath");
Run Code Online (Sandbox Code Playgroud)
在网上我发现如何读到文件末尾的所有例子中,两个例子一直在发生
while ((line = tr.ReadLine() != null)
Run Code Online (Sandbox Code Playgroud)
要么
while (tr.Peek() >= 0)
Run Code Online (Sandbox Code Playgroud)
我注意到StreamReader有一个bool EndOfStream,但是没有人建议它让我相信这个解决方案有问题.我结束了这样尝试......
while (!(tr as StreamReader).EndOfStream)
Run Code Online (Sandbox Code Playgroud)
它似乎工作得很好.
所以我想我的问题是,我是否会遇到将TextReader转换为StreamReader并检查EndOfStream的问题?
我正在读取一个文件(该文件由一个长度为2GB的长字符串组成).
这是我的函数,它将文件的所有内容读入内存,然后拆分字符串并放置:*reader = StreamReader
public List<char[]> GetAllContentAsList()
{
int bytesToRead = 1000000;
char[] buffer = new char[bytesToRead];
List<char[]> results = new List<char[]>();
while (_reader.Read(buffer, 0, bytesToRead) != 0)
{
char[] temp = new char[bytesToRead];
Array.Copy(buffer,temp,bytesToRead);
results.Add(temp);
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
当所有数据放入List时,RAM占用4gb.当文件大小只有2GB时,这怎么可能?
*编辑
这就是我最终做的事情.我没有将字节数组转换为字符串,我只是在操作它们时传递字节.这个场景只有2Gb而不是4gb
public List<byte[]> GetAllContentAsList()
{
int bytesToRead = 1000000;
var buffer = new byte[bytesToRead];
List<byte[]> results = new List<byte[]>();
while (_reader.Read(buffer, 0, bytesToRead) != 0)
{
//string temp = Encoding.UTF8.GetString(buffer);
byte[] b = new byte[bytesToRead];
Array.Copy(buffer,b,bytesToRead);
results.Add(b);
} …Run Code Online (Sandbox Code Playgroud) 我有一个TextReader对象。
现在,我想将 的全部内容流式传输TextReader到文件中。我不能ReadToEnd()一次全部使用和写入一个文件,因为内容可能很大。
有人可以给我一个示例/提示如何在 Blocks 中执行此操作吗?
有没有办法通过代理使以下功能工作?
public T[] ReadStream(System.IO.TextReader reader);
我希望能够代理reader实例,以便它可以在读取尝试时从Web下载文件并将其缓存到某处.
或者为此可能有默认值?
你好.最近,我了解了该课程TextReader以及如何阅读文本文件.但是,有一些我不太了解的事情.
假设这是一个新对象:
TextReader TR = new StreamReader(@"C:\Users\Administrator\Desktop\Text1.txt");
Run Code Online (Sandbox Code Playgroud)
所以我想知道那里有多少个字母,所以我输入了这个,对吧?
Console.WriteLine(TR.ReadToEnd().Length);
Run Code Online (Sandbox Code Playgroud)
但是,它返回第一行的数字,它是当前的,但是当我添加新行时.无论是否输入任何内容,长度都会增加.假设\n这是一个新行的代码[也许我错了,但它有意义]
所以我需要减少这样的长度:
current length - line count*2
Run Code Online (Sandbox Code Playgroud)
所以我在我的文本文件中得到了正确数量的字母.问题是:我如何获得行数?
还有另一种检查字母数的方法吗?如果有,怎么样?无论如何,如何获取文本文件中的行数?
谢谢.=)
当我看到这篇博客文章时,我正在使用XML来编写和反序列化类对象,该博客文章介绍了如何使用隔离存储区在Windows Phone 7上执行此操作.Windows Phone 7是我正在开发的平台:
在此示例中,他显式调用Dispose()的唯一对象是TextReader对象.我在MSDN上查找了TextReader对象,发现文档说这个:
释放TextReader使用的非托管资源,并可以选择释放托管资源.
所以我假设他这样做的原因是立即释放TextReader对象获取的非托管资源.如果不是因为他的博客文章,我不会想到这样做.显然我不想开始在视线中的每个对象上调用Dispose(),所以至少在调查特定对象何时应该调用Dispose()时,有什么好的经验法则?是否有一些指南或某个列表,至少是需要这种特殊处理的流行.NET对象?
private void button1_Click(object sender, EventArgs e)
{
string fileLoc = @"c:\wms.txt";
if (File.Exists(fileLoc))
{
using (TextReader tr = new StreamReader(fileLoc))
{
MessageBox.Show(tr.ReadLine());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在我创建Windows应用程序时非常有效.
当我在设备应用程序中使用相同的代码时 - Windows CE我收到错误:

使用:.Net 2.0,visual Studio 2005
基本上我需要有人来帮助我或者给我看一些代码,这些代码可以让我从一个名为c1.txt的文件中读取名称和价格.
这就是我已经拥有的.
TextReader c1 = new StreamReader("c1.txt");
if (cse == "c1")
{
string compc1;
compc1 = c1.ReadLine();
Console.WriteLine(compc1);
Console.WriteLine();
compcase = compc1;
compcasecost = 89.99;
}
Run Code Online (Sandbox Code Playgroud)
如何选择一行来从文本文档中读取将是很好的.
我基本上想要忽略某些带有字符的行,比如是否有一行
// hello, i'm bill
Run Code Online (Sandbox Code Playgroud)
我想在阅读时忽略该行,因为它包含字符"//".我怎样才能做到这一点?我尝试了方法skip(),但它给了我错误.
public String[] OpenFile() throws IOException {
FileReader reader = new FileReader(path);
BufferedReader textReader = new BufferedReader(reader);
int numberOfLines = readLines();
String[] textData = new String[numberOfLines];
int i;
for (i=0; i<numberOfLines; i++) {
textData[i] = textReader.readLine();
}
// close the line-by-line reader and return the data
textReader.close();
return textData;
}
int readLines() throws IOException {
FileReader reader = new FileReader(path);
BufferedReader textReader = new BufferedReader(reader);
String line;
int numberOfLines = 0;
while ((line = textReader.readLine()) …Run Code Online (Sandbox Code Playgroud) 尝试使用StreamReader或类似的C#来读取和写入非常长的行而不使用换行符.
据我了解,在一个称为文件的长字节中,换行仍然只是2个字节(CR + LF).至少那就是我在C/C++中的习惯......
这对于C#和.net是否相同,或者没有换行的行有一些最大长度?
我想将文件中的数字相加。数字是 31 32 45 65 67 54 43 78 98 33 14 25。答案应该是 585,但代码给出了 287。我哪里出错了,如何解决?
using System;
using System.IO;
namespace TaaviSimsonTest
{
class Program
{
static void Main(string[] args)
{
using (TextReader reader = File.OpenText("C:\\temp\\andmed.txt"))
{
int sum = 0;
while (reader.ReadLine() != null)
{
int i = int.Parse(reader.ReadLine());
sum += i;
}
Console.WriteLine(sum);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) textreader ×11
c# ×10
.net ×4
streamreader ×4
lines ×2
.net-2.0 ×1
count ×1
dispose ×1
download ×1
file ×1
file-io ×1
filestream ×1
java ×1
line-breaks ×1
parsing ×1
proxy ×1
readfile ×1
readline ×1
stream ×1
sum ×1
text ×1
unmanaged ×1
windows-ce ×1