Golang 实现简单的滚动读取文本更新

这个小程序要实现的效果,简单地说,就是将目标文件的内容读取输出到终端,并且目标文件并不是静态的,而是随时会添加新的内容。我们的目标就是一旦目标文件添加了新的内容,就把它读取出来并且显示到终端上。

实现方法很简单,用一个变量offset标记已经读到了文件的哪个位置,每次循环开始前就将读指针指到相应位置。这里有两个tricky的地方需要注意,我们在每次循环的时候都要重复地打开和关闭文件,否则文件有更新也读不出来。当我们读到文件末尾时,会多读出一个字符(文件结束标识符?)。具体的实现如下:

package main

import (
	"fmt"
	"os"
	"io"
	"time"
)

func main() {
	file := os.Args[1];
	buf := make([]byte, 1024)
	offset := 0
	for {
		f, err := os.Open(file)
		if err != nil {
			fmt.Printf("open file %s failed: %v\n", file, err)
			return
		}

		f.Seek(int64(offset), 0)

		n, err := f.Read(buf)
		if err != nil && err != io.EOF {
			fmt.Printf("read file %s failed: %v\n", file, err)
			return
		}
		if (n > 1) {
			if (n < len(buf)) {
				n--
			}
			fmt.Printf("%s", string(buf[:n]))
			offset += n
		}

		f.Close()
		time.Sleep( 1 * time.Second )
	}

}

  

时间: 2024-08-04 23:21:36

Golang 实现简单的滚动读取文本更新的相关文章

自己动手写简单的web应用服务器(3)—服务器从磁盘文件中读取文本,发送给客户端

服务器: 1 package serverAndClient; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.InputStreamReader; 9 import java.io.OutputStream;

python 逐行读取文本

f = open("foo.txt") # 返回一个文件对象line = f.readline() # 调用文件的 readline()方法while line: print line, # 后面跟 ',' 将忽略换行符 # print(line, end = '') # 在 Python 3中使用 line = f.readline() f.close() 也可以写成以下更简洁的形式 for line in open("foo.txt"): print line,

容易使用的读取文本播放器 Text to Speech Maker 2.5

FilmConvert Stand Alone 1.216 MacOSXAutodesk.Smoke.v2015.SP1.MacOSX 1DVDAutodesk Smoke 2015提供更快的效能和更平易近人的价格专 为以Mac计算机作业的小型工作室设计,Smoke 2015专业影音特效和剪辑工具现在具备了 3D追踪.新的Timeline FX工作流程.针对搭载OS X Mavericks操作系统的新版Mac Pro新增硬件支持和系统运作的最佳化,并与Final Cut Pro X提供更佳的互通

汇编语言使用转义字符实现简单的“全屏”文本输出

这是一个运行在Linux下的.简单的汇编程序,使用NASM 2.11,展示了使用转义字符实现简单的“全屏”文本输出 ; 可执行文件名 : eatterm ; 版本 : 1.0 ; 创建日期 : 7/10/2016 ; 最后更新日期 : 7/10/2016 ; 作者 : Moonlight Poet ; 描述 : 一个运行在Linux下的.简单的汇编程序,使用NASM 2.11, ; 展示了使用转义字符实现简单的“全屏”文本输出 ; ; 使用以下命令生成: ; nams -f elf -g -F

使用Golang实现简单Ping过程

引言 关于各种语言实现Ping已经是大家喜闻乐见的事情了,网络上利用Golang实现Ping已经有比较详细的代码示例,但大多是仅仅是实现了Request过程,而对Response的回显内容并没有做接收.而Ping程序不仅仅是发送一个ICMP,更重要的是如何接收并进行统计. 下面是网络上几篇关于Ping的实现代码: https://github.com/paulstuart/ping/blob/master/ping.go http://blog.csdn.net/gophers/article/

Golang的交互模式进阶-读取用户的输入

Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出.我们如何读取用户的键盘(控制台)输入呢?从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.

qt读取文本

直接 代码: 1 // lyy : 2016/8/26 16:40:11 说明:读取文本 2 bool FileOpeartion:: GetTheTextContent (const QString strPath, QStringList &strContent) 3 { 4 QFile file (strPath); 5 6 if (file.open (QIODevice::ReadOnly | QIODevice::Text)) 7 { 8 QTextStream in (&fi

C#读取文本播放相应语音【转】

第一种方案: 利用微软text to speech引擎(TTS),读取文本 (1)添加Microsoft Speech Object Library的项目引用 (2)引入using SpeechLib名称控件 (3)读取文本 SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;         SpVoice voice = new SpVoice(); //默认使用“控制面板”—>“声音”—>“录制”选项卡的“配置

【MongoDB学习笔记5】MongoDB中的创建、读取、更新、删除(CRUD)

数据库会用到创建(create)读取(find)更新(update)删除(remove),MongoDB也同样会用到: 一.创建 用insert函数将文档添加到集合中.例如 创建数据库blog,将文档增加到集合post中(先将文档放入post的变量中) > post={"title":"My blog post","context":"Here's my blog post","date":new D