标签: streamreader

为什么 StreamWriter 无法访问关闭的流,而 StreamReader 可以?

如果我写以下语句。

fileStream.Close();
reader.Close();
writer.Close();
Run Code Online (Sandbox Code Playgroud)

reader.Close() 语句执行成功。但我收到错误“无法打开关闭的文件”。在第三条语句 writer.Close()

如果我写

fileStream.Close();
writer.Close();
reader.Close();
Run Code Online (Sandbox Code Playgroud)

第二条语句,即 writer.Close() 本身抛出相同的异常。

有人有想法吗?

c# filestream streamwriter streamreader

1
推荐指数
1
解决办法
2772
查看次数

与 2 个不同读者一起阅读流

我有一个文本文件,其中包含我要解析的固定长度表。但是,文件的开头是有关何时生成此表的一般信息(IE 时间、数据等)。

为了阅读此内容,我尝试创建一个FileStream,然后使用 . 读取该文件的第一部分StreamReader。我从文档的顶部解析出我需要的内容,然后当我完成时,将流的位置设置为结构化数据的第一行。

然后我将 a 附加TextFieldParser到流(使用固定长度表的适当设置),然后尝试读取该文件。在第一行,它失败了,在ErrorLine属性中,它列出了表第三行的后半部分。我浏览了一下,发现它位于第一行,但ErrorLine酒店却暗示情况并非如此。

调试时,我发现如果在StreamReader.ReadLine()将其附加TextFieldParser到流后尝试使用我的方法,前两行显示正常。然而,当我阅读第三行时,它返回一行,该行从第三行的前半部分开始(并在文本所在的位置停止ErrorLine)附加文档中稍后的部分内容。如果我在附加之前尝试此操作TextFieldParser,它会很好地读取所有 3 行。

我有一种感觉,这与我将 2 个读者绑定到同一个流有关。我不知道如何使用结构化部分和非结构化部分来阅读此内容,而不只是自己标记这些行。我可以做到这一点,但我假设我不是第一个想要以一种方式读取流的一部分,并以另一种方式读取流的后续部分的人。

为什么会这样跳过,如何读取不同格式的文本文件?

例子:

Date: 3/1/2013
Time: 3:00 PM
Sensor:  Awesome Thing

Seconds   X        Y          Value
0         5.1      2.8        55
30        4.9      2.5        33
60        5.0      5.3        44
Run Code Online (Sandbox Code Playgroud)

为这个简化示例定制的代码:

Boolean setupInfo = true;
DataTable result = new DataTable();
String[] fields;
Double[] dFields;

FileStream stream = File.Open(filePath,FileMode.Open);

StreamReader reader = new …
Run Code Online (Sandbox Code Playgroud)

c# stream filestream streamreader fixed-width

1
推荐指数
1
解决办法
4692
查看次数

如何阅读文本文档中的下一行?

我想知道如何阅读文本文档的下一行。如果我单击按钮,它应该打开文本文档并阅读第一行。然后,如果我单击“下一步”按钮,它应该读取下一行。我该怎么做第二个按钮?在 C 和其他语言中,有一些用于此的命令。

.net c# file streamreader

1
推荐指数
1
解决办法
1万
查看次数

如何读取 HttpWebResponse 两次

如何两次读取 HttpWebResponse?有可能吗?

我的代码不起作用,也respStream.Position = 0;没有帮助。

有什么线索吗?

var data = (HttpWebRequest)WebRequest.Create(url);  
var response = (HttpWebResponse)data.GetResponse();

var respStream = response.GetResponseStream();

string responseText;         
using (var reader = new StreamReader(respStream, encoding))
{
     responseText = reader.ReadToEnd().Trim();
}
// Do something and read it again
using (var reader = new StreamReader(respStream, encoding))
{
     responseText = reader.ReadToEnd().Trim();
}
Run Code Online (Sandbox Code Playgroud)

.net c# webrequest httpwebresponse streamreader

1
推荐指数
1
解决办法
1870
查看次数

如何在不锁定磁盘文件的情况下读取文本文件?

基本上我有一些这样的代码将 ASCII 文本文件的内容读入一个列表:

    List<string> lines = new List<string> ( );
    using ( StreamReader sr = File.OpenText ( textfile ) )
    {
        string s = String.Empty;
        while ( ( s = sr.ReadLine ( ) ) != null )
            lines.Add ( s );
    }
Run Code Online (Sandbox Code Playgroud)

但问题是当另一个线程正在写入文件时,它会引发异常:

该进程无法访问文件“myfile.txt”,因为它正被另一个进程使用。

File.ReadAllLines 也会发生同样的事情。为什么这些函数会锁定磁盘上的文件或关心该文件正在被另一个进程使用?

我只是想定期读取内容,所以如果这次正在使用它,那么下次它将读取更新的内容。我这样做是为了检查是否添加了新条目,因为用户也可以手动添加它们。

我可以使用哪些函数将此文件读入内存而不引发异常,或者我应该使用在 try/catch 中运行此代码。

这是最新的代码:

        var fs = new FileStream ( filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite );
        using ( StreamReader sr = new StreamReader ( fs ) )
        {
            string s = String.Empty;
            while ( …
Run Code Online (Sandbox Code Playgroud)

.net c# parsing file streamreader

1
推荐指数
1
解决办法
293
查看次数

FileStream 与 StreamReader 和 StreamWriter - 有什么区别?

当处理无法通过 完成的文件时StreamReader,通过 允许哪些功能,反之亦然?我检查了文档,它们都有读/写选项,包括更高级的选项。那么我什么时候应该使用它们呢?StreamWriterFileStream

c# file filestream streamwriter streamreader

1
推荐指数
2
解决办法
5008
查看次数

将文本文件中的多个字符串替换为不同的文本

我有一个像这样的文本文件:

模板.txt

hello my name is [MYNAME], and i am of age [AGE].
i live in [COUNTRY].
i love to eat [FOOD]
Run Code Online (Sandbox Code Playgroud)

我试图用列表示例中的字符串替换方括号中的内容

//         // name //country // age // food           
p.Add(new Person("jack", "NZ", "20", "Prawns"));
p.Add(new Person("ana", "AUS", "23", "Chicken"));
p.Add(new Person("tom", "USA", "30", "Lamb"));
p.Add(new Person("ken", "JAPAN", "15", "Candy"));
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了以下在循环内调用的函数

//loop
 static void Main(string[] args)
{
   int count = 0;
  foreach (var l in p)
  {
    FindAndReplace("template.txt","output"+count+".txt" ,"[MYNAME]",l.name);
    FindAndReplace("template.txt","output"+count+".txt" ,"[COUNTRY]",l.country);
    FindAndReplace("template.txt","output"+count+".txt" ,"[AGE]",l.age);
    FindAndReplace("template.txt","output"+count+".txt" ,"[FOOD]",l.food);
    count++;
  }
}
//find …
Run Code Online (Sandbox Code Playgroud)

c# streamreader

1
推荐指数
1
解决办法
897
查看次数

为什么这个StreamReader只读一行?

下面的代码应该读取文件的每一行并对其进行操作.但是,它只读取第一行.没有for循环,它会读取整个文件.老实说,我不知道为什么它不读整篇文章.

StreamReader sr = new StreamReader(gridPath);

string line;
char[] lineCh;
char current;
int x, y;
bool north, east, south, west;

x = y = 0;

while ((line = sr.ReadLine()) != null)
{
    lineCh = line.ToCharArray();
    for (int i = 0; i < lineCh.Length; i++)
    {
        current = lineCh[i];
        north = CheckInput(current);
        current = lineCh[++i];
        east = CheckInput(current);
        current = lineCh[++i];
        south = CheckInput(current);
        current = lineCh[++i];
        west = CheckInput(current);
        i++; // Hop over space
        grid[x, y] = new GridSquare(north, east, …
Run Code Online (Sandbox Code Playgroud)

c# streamreader

0
推荐指数
1
解决办法
2734
查看次数

C#字符串到整数转换问题

前一段时间,我开始在vb.net上创建一个程序.从那以后我丢失了代码,并开始使用c#.我已经转换了所有内容,除了我给我的更新系统"无法隐式转换类型'字符串'到'int'streamreader".

继承旧代码:

        Try
        Dim Build As Integer
        Build = 3

        Dim url As String
        url = "###link###"
        Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url)
        Dim response As System.Net.HttpWebResponse = request.GetResponse()
        Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("windows-1252"))
        Dim Online As Integer
        Online = sr.ReadToEnd()

        If Build >= Online Then
            Label10.Visible = True
        Else
            LinkLabel1.Visible = True
        End If
    Catch ex As Exception
        Me.Close()
    End Try
Run Code Online (Sandbox Code Playgroud)

这是我转换的代码:

            try
        {
            int Build = 0; 
            Build = 3;

            string url = null;
            url …
Run Code Online (Sandbox Code Playgroud)

c# string integer streamreader

0
推荐指数
1
解决办法
1286
查看次数

嵌套循环C#上出现内存不足错误

我看了这个,我几乎得到了它,但我有一个剩余的运行时错误.
我的代码如下:

while ((line = reader.ReadLine()) != null)
{
    while (reader.Peek() != '\r')
    {
        datalinestream.Add(GetWord(reader));
    }
    LuceneDB.AddUpdateLuceneIndex(new MATS_Doc( datalinestream));
    datalinestream.Clear();
}
Run Code Online (Sandbox Code Playgroud)

代码正在导入数据,但循环不会中断,并且由于以下原因而崩溃

"mscorlib.dll中发生了'System.OutOfMemoryException'类型的未处理异常"

外部while循环的适当中断条件是什么,以确保我读取整个文件并在结束时中断.我很难解决这个问题,因为我需要前进到下一行,我需要跳过电子表格中的第一行.任何帮助非常感谢.

*更新*

我清除字符串列表,因为我正在为lucene索引创建一个文档,它只有大约14个字段,我不希望列表变得太大.

我的getword代码

private string GetWord(TextReader inputdata)
        {
            String word = "";

            while (inputdata.Peek() >= 0)
            {
                word += (char)inputdata.Read();
                if ((word.Contains(";"))) break;
            }

        return word;
    }
Run Code Online (Sandbox Code Playgroud)

c# streamreader while-loop

0
推荐指数
1
解决办法
317
查看次数