gpt4 book ai didi

go - golang如何写入文件

转载 作者:IT老高 更新时间:2023-10-28 13:04:20 38 4
gpt4 key购买 nike

我正在尝试写入文件。我阅读了文件的全部内容,现在我想根据我从文件中得到的一些单词来更改文件的内容。但是当我检查文件的内容时,它仍然是相同的并且没有改变。这是我用的

if strings.Contains(string(read), sam) {
fmt.Println("this file contain that word")
temp := strings.ToUpper(sam)
fmt.Println(temp)
err := ioutil.WriteFile(fi.Name(), []byte(temp), 0644)
} else {
fmt.Println(" the word is not in the file")
}

最佳答案

考虑到您调用 ioutil.WriteFile()与“Go by Example: Writing Files ”中使用的一致,应该可以。

但是那篇 Go by example 文章会在 write 调用之后检查错误。

您在测试范围之外检查错误:

    if matched {
read, err := ioutil.ReadFile(path)
//fmt.Println(string(read))
fmt.Println(" This is the name of the file", fi.Name())
if strings.Contains(string(read), sam) {
fmt.Println("this file contain that word")
Value := strings.ToUpper(sam)
fmt.Println(Value)
err = ioutil.WriteFile(fi.Name(), []byte(Value), 0644)
} else {
fmt.Println(" the word is not in the file")
}
check(err) <===== too late
}

您正在测试的错误是您在读取文件时遇到的错误 (ioutil.ReadFile),因为 blocks and scope .

您需要在 Write 调用后立即检查错误

            err = ioutil.WriteFile(fi.Name(), []byte(Value), 0644)
check(err) <===== too late

由于WriteFile 覆盖了所有文件,您可以strings.Replace()用大写等效替换您的单词:

r := string(read)
r = strings.Replace(r, sam, strings.ToUpper(sam), -1)
err := ioutil.WriteFile(fi.Name(), []byte(r), 0644)

对于不区分大小写的替换,请使用“How do I do a case insensitive regular expression in Go?”中的正则表达式。
的,使用func (*Regexp) ReplaceAllString :

re := regexp.MustCompile("(?i)\\b"+sam+"\\b")
r = re.ReplaceAllString(r, strings.ToUpper(sam))
err := ioutil.WriteFile(fi.Name(), []byte(r), 0644)

注意\b: word boundary 查找以 sam 内容开头和结尾的任何 word 内容(而不是查找子字符串 包含 sam内容)。
如果要替换子字符串,只需删除 \b:

re := regexp.MustCompile("(?i)"+sam)

关于go - golang如何写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811770/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com