我想使用FileStream并在文件的开头搜索,同时在文件大小的文件大小中向前移动。
所以我想在文件中寻找一个位置,读取整行,如果符合我的标准,我就完成了。如果没有,我会向前寻找另一个.01。
C#没问题,但VB.NET更喜欢。
我曾经在VB6中做过类似的事情......
FileOpen(1, CurrentFullPath, OpenMode.Input, OpenAccess.Read, OpenShare.Shared)
Dim FileLength As Long = LOF(1)
For x As Single = 0.99 To 0 Step -0.01
Seek(1, CInt(FileLength * x))
Dim S As String = LineInput(1)
S = LineInput(1)
filePosition = Seek(1)
If filePosition < 50000 Then
filePosition = 1
Exit For
End If
V = Split(S, ",")
Dim MessageTime As Date = CDate(V(3) & " " & Mid$(V(4), 1, 8))
Dim Diff As Integer = DateDiff(DateInterval.Minute, MessageTime, CDate(RequestedStartTime))
If Diff >= 2 Then
Exit For
End If
Next
但我不想使用FileOpen,我想使用FileStream。
非常感谢任何帮助!
答案 0 :(得分:3)
这是对代码的或多或少直接转换,我们使用FileStream.Position指定文件中的读取位置:
Using streamReader As System.IO.StreamReader = System.IO.File.OpenText(CurrentFullPath) For x As Single = 0.99 To 0 Step -0.01 streamReader.BaseStream.Position = CLng(streamReader.BaseStream.Length * x) Dim S As String = streamReader.ReadLine() '... etc. Next End Using
答案 1 :(得分:1)
这样的事情(C#版本):
using (var file = System.IO.File.OpenText(filename))
{
while (!file.EndOfStream)
{
string line = file.ReadLine();
//do your logic here
//Logical test - if true, then break
}
}
编辑:VB版本(警告 - 来自C#dev!)
Using file as FileStream = File.OpenText(filename)
while Not file.EndOfStream
Dim line as string = file.ReadLine()
''//Test to break
''//exit while if condition met
End While
End Using
答案 2 :(得分:0)
我通常更喜欢vb.net,但C#的迭代器块正在慢慢赢得我的支持:
public static IEnumerable<string> SkimFile(string FileName)
{
long delta = new FileInfo(FileName).Length / 100;
long position = 0;
using (StreamReader sr = new StreamReader(FileName))
{
while (position < 100)
{
sr.BaseStream.Seek(position * delta, SeekOrigin.Begin);
yield return sr.ReadLine();
position++;
}
}
}
将它放在类库项目中并从vb中使用它:
Dim isMatch as Boolean = False
For Each s As String in SkimFile("FileName.txt")
If (RequestedDate - CDate(s.SubString(3,11))).Minutes > 2 Then
isMatch = True
Exit For
End If
Next s
(我对你的标准采取了一些自由(假设固定宽度值而不是分隔),以使示例更容易)
答案 3 :(得分:0)
编辑以回应评论:
我必须承认我有点困惑,因为你似乎坚持使用缓冲的FileStream,但是想要一次读取一行文件?您可以使用StreamReader完成此操作。我不懂VB,但在C#中它会是这样的:
using (StreamReader sr = File.OpenText(pathToFile))
{
string line = String.Empty;
while ((line = sr.ReadLine()) != null)
{
// process line
}
}
请参阅http://msdn.microsoft.com/en-us/library/system.io.file.aspx。