- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
package main
import (
"fmt"
"os"
"io"
)
func main() {
f1,_ := os.Create("f1")
io.WriteString(f1, "some content")
buf := make([]byte, 8)
f1.Read(buf)
fmt.Println(buf)
}
我创建一个文件,然后写入一些字符串。然后读出来,但是没有内容。
输出是:
go run test.go
[0 0 0 0 0 0 0 0]
最佳答案
在 Go 中,不要忽略错误。写入和读取文件时,请跟踪当前文件偏移量。
写入后偏移量位于文件末尾,您需要在读取前将偏移量设置为文件开头。例如,带有诊断信息,
package main
import (
"fmt"
"io"
"os"
)
func main() {
f1, err := os.Create("f1")
if err != nil {
fmt.Println(err)
return
}
defer f1.Close()
// The file offset is its current location.
s, err := f1.Seek(0, io.SeekCurrent)
if err != nil {
fmt.Println(s, err)
return
}
fmt.Println("offset:", s)
// writing takes place at the file offset, and
// the file offset is incremented by the number of bytes actually
// written.
n, err := f1.WriteString("some content")
fmt.Println("write: ", n, err)
if err != nil {
fmt.Println(n, err)
return
}
// The file offset is its current location
s, err = f1.Seek(0, io.SeekCurrent)
if err != nil {
fmt.Println(s, err)
return
}
fmt.Println("offset:", s)
buf := make([]byte, 8)
// the read operation commences at the
// file offset, and the file offset is incremented by the number of
// bytes read. If the file offset is at or past the end of file, no
// bytes are read, and read() returns zero.
n, err = f1.Read(buf[:cap(buf)])
fmt.Println("read: ", n, err)
buf = buf[:n]
fmt.Println("buffer:", len(buf), buf)
if err != nil {
if err != io.EOF {
fmt.Println(n, err)
return
}
}
// The file offset is set to the start-of-file.
s, err = f1.Seek(0, io.SeekStart)
if err != nil {
fmt.Println(s, err)
return
}
fmt.Println("offset:", s)
// the read operation commences at the
// file offset, and the file offset is incremented by the number of
// bytes read. If the file offset is at or past the end of file, no
// bytes are read, and read() returns zero.
n, err = f1.Read(buf[:cap(buf)])
fmt.Println("read: ", n, err)
buf = buf[:n]
fmt.Println("buffer:", len(buf), buf)
if err != nil {
if err != io.EOF {
fmt.Println(n, err)
return
}
}
}
Playground :https://play.golang.org/p/hPUn1ltKP2t
输出:
offset: 0
write: 12 <nil>
offset: 12
read: 0 EOF
buffer: 0 []
offset: 0
read: 8 <nil>
buffer: 8 [115 111 109 101 32 99 111 110]
关于go - 为什么 f1.Read(buf) 没有读出内容到 buf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095867/
这是我的代码.. char buf[5000]; bool isHandshaking = false; bool isSingaling = false; while(1) { //----
这个问题在这里已经有了答案: Undefined behavior and sequence points (5 个答案) 关闭 9 年前。 示例代码 int arr[3] = { 0, 1 };
我使用的是 ubuntu 14.04。所以我有最新的内核。我正在尝试返回 libc 方法。 这是我创建环境变量的代码,稍后将其输入到受害者代码 #include #include #include
这个问题在这里已经有了答案: Is it possible to read an empty string from cin and still get true from cin.good()?
package main import ( "fmt" "os" "io" ) func main() { f1,_ := os.Create("f1") io
有什么区别(如果有的话): #define BUF (8) 和 #define BUF 8 我在 C 编程方面不是很有经验,并且从未见过只有 1 个数字的 #define 而不是将其放在括号中。 PS
错误中的代码 int main() { void *ptr = 0; int overrun = 1; ptr = malloc(overrun); while(
是 char buf[] = "test"; 在 C 中相当于 String buf = new String("test"); 在 Java 中? 而且是 char *buf; buf = "tes
在redis中有一个叫做sdahdr的结构: struct sdahdr { int len; int free; char buf[]; } 为什么不使用 char *buf 而不是 sizeof(
我正在阅读一个 C 代码来做 char * buf = malloc(sizeof (char *) * 16) 代替 char buf[sizeof (char *) * 16] 有什么区别?好吧,
我想在我的 iPhone 上获取 tcp 连接列表。我在 上得到了以下代码 How to get tcp/udp opening port list on iphone by objective-c?
我正在尝试在 visual studio 2010 中使用 opencv 和 curl 从 url 加载图像。运行代码时出现上述错误。该错误是什么意思?如何更正我的代码。这是我的代码 #include
我正在尝试了解 linux 内核中的 dma buf 框架并阅读这篇文章 http://lwn.net/Articles/489703/上面写着 用户空间实体请求一个文件描述符(fd),它是 与缓冲区
我在将原始视频数据写入 AVFrame 时遇到段错误和/或超出范围的内存写入,因此无法使用 ffmpeg 库对视频进行编码。因此,我只想问我的一个假设是否正确。 我是否正确假设 AVFrame.dat
我在 Buf 中有一大块内存我想传递给 C 库,但该库将使用超出单个调用生命周期的内存。 我知道这可能会有问题,因为垃圾收集器可以移动内存。 用于传递 Str , Nativecall docs 说“
我正在尝试包装 read函数来自 unistd.h ,但无法让它工作。 这是我所拥有的:(在文件中:read.raku) use NativeCall; # ssize_t read(int fd,
作为引用,我使用以下代码: #include #include int main (void) { char buf[100]; // ------> How do I find the
这是一个非常简单的问题,我找不到答案。我在 sqlplus (Oracle) 中,我打错了字,输入了“edit”,打开了“afiedt.buf”,据我所知,这将打开我的默认编辑器“vi”。进入编辑器后
我有一个使用 confluence.io kafka 包的带有 avro 消息的 kafka 流。这对于 java 应用程序来说工作得很好。但我现在正在尝试用 JavaScript 读取这些消息。 我
我是编程新手,我有一个关于 C 中的静态变量的项目。我看到我们可以像这样声明一个静态变量: static char *buf = NULL 最后加“=NULL”有什么作用? 最佳答案 在 st
我是一名优秀的程序员,十分优秀!