我正在将文件读取到我的C#应用程序并使用gzip流解压缩tile_data BLOB。我目前通过这种方法访问BLOB数据:
SQLiteCommand command = new SQLiteCommand(query, DbConn);
SQLiteDataReader reader = command.ExecuteReader();
bool isMet = false;
while (reader.Read())
{
using (var file = reader.GetStream(0))
using (var unzip = new GZipStream(file, CompressionMode.Decompress))
using (var fileReader = new StreamReader(unzip))
{
var line = fileReader.ReadLine();
while (!fileReader.EndOfStream)
{
}
Console.WriteLine("End of tile_data");
}
}
reader.Close();
Console.WriteLine("Reader closed");
Console.ReadKey();
}
catch (Exception e)
{
Console.Write(e.StackTrace);
Console.ReadKey();
}
我希望等到fileReader
检测到"tertiary"
(字符串),然后打印所有数据。我试图使用bool
和嵌套的while loop
,但它回来时是一个无限循环,因此问题。
我使用的代码(并且失败了):
if (line.Contains("tertiary"))
{
isMet = true;
}
while (!fileReader.EndOfStream && isMet)
{
Console.WriteLine(line);
}
如果满足条件,我怎样才能使用fileReader
执行操作?
答案 0 :(得分:1)
只有当您的信息流只有一行时,您的fileReader.EndOfStream
循环才有效。问题是你只能从流中读取一次 - 所以除非你已经阅读了整个内容,否则你将无限循环。
相反,做这样的事情:
string line;
while ((line = fileReader.ReadLine()) != null)
{
if (line.Contains("...")) break; // Or whatever else you want to do
}
答案 1 :(得分:1)
您可以使用此代码。它在字符串中找到任何字符。它对我有用。
string matchStr = "tertiary";
if (line.Any(matchStr.Contains)
{
isMet = true;
}
while (!fileReader.EndOfStream && isMet)
{
Console.WriteLine(line);
}
答案 2 :(得分:0)
第var line = fileReader.ReadLine();
行是否在while循环中?
while (!fileReader.EndOfStream)
{
var line = fileReader.ReadLine();
// do some other stuff
}
答案 3 :(得分:0)
尝试这样的事情
var yourval;
var secval = fileReader.ReadLine()
while ((yourval = secval ) != null)
{
if (line.Contains("your string here"))
{
break;
}
}