如果我写以下语句。
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() 本身抛出相同的异常。
有人有想法吗?
我有一个文本文件,其中包含我要解析的固定长度表。但是,文件的开头是有关何时生成此表的一般信息(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 和其他语言中,有一些用于此的命令。
如何两次读取 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) 基本上我有一些这样的代码将 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) 当处理无法通过 完成的文件时StreamReader,通过 允许哪些功能,反之亦然?我检查了文档,它们都有读/写选项,包括更高级的选项。那么我什么时候应该使用它们呢?StreamWriterFileStream
我有一个像这样的文本文件:
模板.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) 下面的代码应该读取文件的每一行并对其进行操作.但是,它只读取第一行.没有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) 前一段时间,我开始在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) 我看了这个,我几乎得到了它,但我有一个剩余的运行时错误.
我的代码如下:
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# ×10
streamreader ×10
.net ×3
file ×3
filestream ×3
streamwriter ×2
fixed-width ×1
integer ×1
parsing ×1
stream ×1
string ×1
webrequest ×1
while-loop ×1