golang写文件异常invalid argument
1 | dst, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644) |
上面是一段很简单的代码,但是在频繁调用的时候报错了了:invalid argument
这个错误着实太误导人了,让我以为是使用的姿势不对,后来发现没有问题,于是开始debug,后来在下面一段代码中发现了真正的问题:
1 | func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) { |
这里给出了真正的原因:
1 | err = errnoErr(e1)//这个地方给出了真正的错误:ERROR_SHARING_VIOLATION (32) |
查询微软https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-文档,
这个错误是因为:
1 | The process cannot access the file because it is being used by another process. |
也就是说,在OpenFile一个文件的时候,之前使用的这个文件的file descriptor 并真正没有释放,所以出错了。
而Golang上层的错误并没有给出明确的错误。
golang写文件异常invalid argument