标签: textreader

在C#中,如何从字符串创建TextReader对象(无需写入磁盘)

我正在使用快速CSV阅读器将一些粘贴的文本解析为网页.Fast CSV阅读器需要一个TextReader对象,而我所拥有的只是一个字符串.在运行中将字符串转换为TextReader对象的最佳方法是什么?

谢谢!

更新 - 示例代码 - 在原始示例中,新的StreamReader正在查找名为"data.csv"的文件.我希望通过TextBox_StartData.Text提供它.

使用下面的代码不会编译.

        TextReader sr = new StringReader(TextBox_StartData.Text);
        using (CsvReader csv = new CsvReader(new StreamReader(sr), true))
        {
            DetailsView1.DataSource = csv;
            DetailsView1.DataBind();
        }
Run Code Online (Sandbox Code Playgroud)

new StreamReader(sr)告诉我它有一些无效的参数.有任何想法吗?

作为替代方法,我试过这个:

        TextReader sr = new StreamReader(TextBox_StartData.Text);
        using (CsvReader csv = new CsvReader(sr, true))
        {
            DetailsView1.DataSource = csv;
            DetailsView1.DataBind();
        }
Run Code Online (Sandbox Code Playgroud)

但我得到一个Illegal characters in path Error.这里是TextBox_StartData.Text中的字符串示例:

Fname\tLname\tEmail\nClaude\tCuriel\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n
Run Code Online (Sandbox Code Playgroud)

如果这是正确的方法,任何想法?再次感谢你的帮助!

c# csv textreader csvhelper

115
推荐指数
4
解决办法
8万
查看次数

读取和写入文件C#时共享违规IOException

这是我的代码:

public static TextWriter twLog = null;
private int fileNo = 1;
private string line = null;

TextReader tr = new StreamReader("file_no.txt");
TextWriter tw = new StreamWriter("file_no.txt");
line = tr.ReadLine();
if(line != null){
    fileNo = int.Parse(line);
    twLog = new StreamWriter("log_" + line + ".txt");
}else{
    twLog = new StreamWriter("log_" + fileNo.toString() + ".txt");  
}
System.IO.File.WriteAllText("file_no.txt",string.Empty);
tw.WriteLine((fileNo++).ToString());
tr.Close();
tw.Close();
twLog.Close();
Run Code Online (Sandbox Code Playgroud)

它抛出此错误:

IOException:路径C:\ Users\Water Simulation\file_no.txt上的共享冲突

我要做的只是打开一个带有log_x.txt名称的文件,并从file_no.txt文件中取出"x".如果file_no.txt文件为空,请将日志文件的名称设为log_1.txt并写入"fileNo + 1" to file_no.txt.新程序启动后,新的日志文件名必须是log_2.txt.But我收到此错误,我无法理解我做错了什么.谢谢你的帮助.

c# file-io textreader textwriter

21
推荐指数
2
解决办法
7万
查看次数

如何从TextReader循环遍历行?

如何从TextReader 循环遍历行source

我试过了

foreach (var line in source)
Run Code Online (Sandbox Code Playgroud)

但得到了错误

foreach语句不能对'System.IO.TextReader'类型的变量进行操作,因为'System.IO.TextReader'不包含'GetEnumerator'的公共定义

.net c# textreader

11
推荐指数
2
解决办法
3万
查看次数

为什么IEumerator <T>会影响IEnumerable <T>的状态,即使枚举器从未到达终点?

我很好奇为什么以下内容在"最后"赋值时抛出错误消息(文本阅读器关闭异常):

IEnumerable<string> textRows = File.ReadLines(sourceTextFileName);
IEnumerator<string> textEnumerator = textRows.GetEnumerator();

string first = textRows.First();
string last = textRows.Last();
Run Code Online (Sandbox Code Playgroud)

但是以下执行正常:

IEnumerable<string> textRows = File.ReadLines(sourceTextFileName);

string first = textRows.First();
string last = textRows.Last();

IEnumerator<string> textEnumerator = textRows.GetEnumerator();
Run Code Online (Sandbox Code Playgroud)

不同行为的原因是什么?

c# ienumerable ienumerator textreader

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

TextReader.Peek行为和检测流/阅读器的结束

当我使用文本阅读器时,检测到我实际上在数据末尾的最佳方法是什么?通常的方法做,这是什么的下面,

    while(reader.Peek() != -1)
    {
       ///do stuff
    }
Run Code Online (Sandbox Code Playgroud)

但是这里的msdn文档说明如下

表示要读取的下一个字符的整数,如果没有更多字符可用或读者不支持搜索,则返回-1.

所以我的问题是你怎么知道你是否真的在读者数据的末尾,或者读者/底层流不支持寻求,因为这里的返回值似乎含糊不清?如果我有以下内容

    public void Parse(TextReader reader)
    {
         while(reader.Peek() != -1) //am I really at the end
         {
            //do stuff
         }
    }

    Parse(new StreamReader(new NetworkStream(....)));
Run Code Online (Sandbox Code Playgroud)

因为网络流不支持寻求.

还是我错过了什么?

编辑:

为了澄清,我可以使用更具体的StreamReader类轻松实现这一点,因为我可以检查EoS.但是为了保持一般性,我想使用TextReader,所以我不仅仅与StreamReader绑定.然而,Peek的语义似乎有点奇怪,为什么它不仅仅是在寻求不支持的情况下抛出,为此为什么没有TextReader的EoF属性?

.net c# textreader

8
推荐指数
2
解决办法
7661
查看次数

如何从XDocument轻松获取TextReader?

给定一个XDocument实例,如何轻松获取表示该实例的TextReader?

我能想出的最好的东西是这样的(xmlXDocument实例在哪里):

var s = new MemoryStream();
var sw = new StreamWriter(s);

xml.Save(sw);

sw.Flush();
s.Position = 0;

TextReader tr = new StreamReader(s);
Run Code Online (Sandbox Code Playgroud)

然而,这似乎有点笨重,所以我想知道是否有更简单的方法?


编辑

上面的示例等效于将整个实例转换为XML字符串,然后在该字符串上创建TextReader.

我只是想知道是否有一种类似于流的方式来执行它而不是将整个内容读入内存.

.net linq-to-xml textreader

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

如何将多个TextReader串在一起?

我有3个TextReaders - StreamReaders和StringReaders的组合.从概念上讲,它们的串联是单个文本文档.

我想调用一个带有单个TextReader的方法(不在我的控制之下).是否有任何内置或简单的方法可以从多个TextReader中连接TextReader?

(我可以编写自己的TextReader子类,但看起来工作量相当大.在这种情况下,我只需将它们全部写入临时文件,然后使用单个StreamReader打开它.)

有一个简单的解决方案,我错过了吗?

c# concatenation streamreader textreader stringreader

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

C#。为什么当我使用 TextReader.Read() 时它返回一个 int 值?可以转换成char吗?

因此 TextReader.ReadLine() 返回一个字符串,但 TextReader.Read() 返回一个 int 值。这个 int 值似乎也是某种我无法识别的格式。是否可以将这个整数转换为字符?谢谢你的帮助。

编辑:

TextReader 值 = new StreamReader(@"txt");

    string SValue1;
    int Value1;       
    Value1 = Values.Read();        
    Console.WriteLine(Value1);
    Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

当它读出值时,它给出 51 作为输出。txt文件中的第一个字符是3。为什么会这样做呢?

c# input int32 char textreader

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

如何在ShareDenyWrite模式下打开StreamReader?

如何打开一个StreamReaderFILE_SHARE_READ,FILE_SHARE_WRITE,FILE_SHARE_DELETE


同样的问题,略有扩展

我如何打开一个StreamReader以便我可以读取编码的文本文件,共享选项,以便另一个进程可以读取该文件?

我如何打开一个StreamReader以便我可以读取编码的文本文件,使用共享选项,以便其他进程可以在我阅读时修改该文件?

我如何打开一个StreamReader以便我可以读取编码的文本文件,使用共享选项,以便其他进程可以在我阅读时删除该文件?


同样的问题,稍微扩大一点

在.NET Framework类库中有一个名为的类StreamReader.它是唯一一个用于读取"text"的类,这就是它从抽象基TextReader类中下降的原因.在TextReader/StreamReader允许您指定由您试图打开该文件使用的编码,并可以为您的文件进行解码,并返回Strings文本.

一旦我打开了一个文件StreamReader:

var sr = new StreamReader(path);
Run Code Online (Sandbox Code Playgroud)

文件被锁定,其他进程无法修改删除该文件.我需要的是相当于一个FileStream类的FileShare枚举:

  • :拒绝共享当前文件.在文件关闭之前,任何打开文件的请求(通过此进程或其他进程)都将失败.
  • 读取 ":允许随后打开文件进行读取.如果未指定此标志,则打开文件进行读取(通过此进程或其他进程)的任何请求都将失败,直到文件关闭.但是,即使此标志为如果指定,则可能仍需要其他权限才能访问该文件.
  • 写入:允许随后打开文件进行写入.如果未指定此标志,则在文件关闭之前,任何打开文件以进行写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • ReadWrite:允许随后打开文件进行读写.如果未指定此标志,则在文件关闭之前,任何打开文件以进行读取或写入(通过此进程或其他进程)的请求都将失败.但是,即使指定了此标志,仍可能需要其他权限才能访问该文件.
  • 删除:允许后续删除文件.

除此之外,由于显而易见的原因,我不能使用FileStream- 必须使用a StreamReader.

我怎样才能打开一个StreamReaderFileShare.ReadWrite | FileShare.Delete

c# sharing fileshare streamreader textreader

5
推荐指数
2
解决办法
4583
查看次数

TextReader上的Read()和ReadBlock()调用有什么区别?

标题或多或少都说明了一切.电话记录:

这里 for TextReader.Read Method (Char[], Int32, Int32)
Here用于TextReader.ReadBlock()相同的参数类型.

我想提取一个字节数组的一部分,为此我构成一个MemoryStream我打算用StreamReader这样的方式读取:

    StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
    r.Read.....
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一个?其中一个更快还是更好?

c# stream streamreader textreader

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