gpt4 book ai didi

windows - 是否可以打开一个文件以允许其他进程删除该文件?

转载 作者:IT王子 更新时间:2023-10-29 01:37:01 26 4
gpt4 key购买 nike

似乎默认的 os.Open 调用允许另一个进程写入打开的文件,但不允许删除它。是否也可以启用删除?在 .NET 中,这可以使用 FileShare.Delete 标志来完成,Go 中有类似的东西吗?

最佳答案

os.Open 将为您提供一个设置了标志 O_RDONLY 的文件描述符;这意味着只读。您可以使用 os.OpenFile

指定您自己的标志
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.

但是,这些模式都不允许您在一个文件上有多个编写器。您可以通过 exec-ing 或 fork-ing 共享文件描述符,但是从两个进程直接写入文件将导致操作系统决定如何同步这些写入——这几乎不是您想要的。

在类 unix 系统上,当进程上有 FD 时删除文件并不重要。不过,我会继续假设 Windows 不会喜欢那样。

根据 进行编辑标签和@Not_a_Golfer 的出色观察:

在 Windows 上,您应该能够将 syscall.FILE_SHARE_DELETE 作为标志传递给 os.OpenFile,如果这能解决您的问题的话。

如果您需要组合多个标志,您可以通过将它们组合在一起来实现:

syscall.FILE_SHARE_DELETE | syscall.SOME_OTHER_FLAG | syscall.AND_A_THIRD_FLAG

(但是请注意,构建一个连贯的标志取决于您)

关于windows - 是否可以打开一个文件以允许其他进程删除该文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23897174/

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