首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go :如何读取两个文件的内容并连接到一个字符串

Go :如何读取两个文件的内容并连接到一个字符串
EN

Stack Overflow用户
提问于 2016-01-09 02:00:45
回答 1查看 381关注 0票数 1

我正在尝试修复docker-machine中的一个bug。问题似乎出在它的vmware-fusion驱动程序中。当尝试通过机器的MAC地址解析机器时,它会查询vmware dhcp leases文件。不幸的是,当您使用自定义网络(例如专用网络vmnet2)时,最新的dhcp租约将位于文件'vmnet-dhcpd-vmnet2.leases‘中。

无论如何,我的围棋知识是不存在的。

我想实现一些类似(伪代码)的东西:

代码语言:javascript
复制
var allText = ""
for i in "/var/db/vmware/*.leases"
  do read i; allText = allText ++ i
done

现有的代码(fusion_darwin.go)如下所示:

代码语言:javascript
复制
// DHCP lease table for NAT vmnet interface
var dhcpfile = "/var/db/vmware/vmnet-dhcpd-vmnet8.leases"

if vmxfh, err = os.Open(d.vmxPath()); err != nil {
    return "", err
}
defer vmxfh.Close()

if vmxcontent, err = ioutil.ReadAll(vmxfh); err != nil {
    return "", err
}

我已经创建了一个问题等等,但如果可能的话,我想了解更多关于Go的知识,并贡献出我能修复的任何东西。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-09 02:10:47

在示例代码中,它们首先使用os.Open返回文件的io.Reader,然后延迟关闭(延迟的方法在您离开延迟作用域之前被调用),以确保其资源得到清理。在下一行中,它们调用ioutil.ReadAll,它接受一个io.Reader并返回一个[]byte, error。如果错误不为零,则只返回错误和空字符串。要从[]字节中获取字符串,只需执行s := string(myBytes)

因此,要读取目标文件,您只需完全复制上述代码的形式即可。更好的是,您可以将其移动到一个方法中,并将文件路径向下传递给它,这样您就可以重用它。值得注意的一点是,在ioutil包中有一种更容易使用的方法。我不确定是否有一个很好的理由没有在上面的代码中使用它,而不是打开文件并将io.Reader传递给ReadAll,您可以只调用ioutil.ReadFile,将它传递给它,它也会返回一个[]byte, error,在检查错误后,您只需将一个字节片段附加到另一个字节片段,转换为字符串并返回它。它看起来有点像这样;

代码语言:javascript
复制
vmnetcontent, err := ioutil.ReadFile("/path/to/file.txt")

if err != nil {
    return "", err
}

return string(append(vmxcontent, vmnetcontent)), nil
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34683261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档