为何f1.Read(buf)无法将内容读取至buf?文件读写无内容问题
嘿,我碰到过好多次这种情况!文件写完后调用f1.Read(buf)读不到内容,大概率是这几个常见问题,我给你拆解下:
文件指针停在末尾了!
当你往文件里写完内容,文件的读写指针会自动跑到文件的最后位置。这时候你直接调用Read,自然从末尾开始读,啥也读不到。解决办法很简单:把指针移回文件开头就行。
举个Go语言的例子:// 写完内容后,添加这行代码 _, err := f1.Seek(0, io.SeekStart) if err != nil { // 处理错误 } // 现在再调用Read就能读到内容了 n, err := f1.Read(buf)Python里也一样,用
f.seek(0)就能把指针移回去。内容还在内存缓存里,没写到磁盘!
很多操作系统和编程语言会把文件写入的内容先存在内存缓存里,不会立刻刷到磁盘。如果你写完直接读(尤其是重新打开文件读的情况),可能磁盘上还没更新。这时候可以调用同步方法,比如Go的f1.Sync(),Python的f.flush(),确保内容写入磁盘后再读取。或者干脆写完就关闭文件,再重新打开读取——关闭文件时系统会自动把缓存刷到磁盘。打开文件的模式不对!
如果你打开文件时只用了写模式(比如Go里的os.O_WRONLY,Python里的"w"),那后续调用Read肯定会失败或者读不到内容。要确保打开文件时用的是可读可写的模式,比如Go的os.O_RDWR|os.O_CREATE,Python的"w+"或者"r+"。缓冲区没处理好(针对带缓冲的IO)
如果你用了带缓冲的读写器(比如Go的bufio.Writer),写完之后一定要调用Flush()把缓冲区里的内容刷到文件里,不然内容还留在缓冲区,文件里根本没有,读当然是空的。
你可以对照自己的代码检查下,大概率是这几个问题中的一个。如果还有疑问,可以把你的代码片段贴出来,我帮你再看看!
内容的提问来源于stack exchange,提问作者offvw

