gpt4 book ai didi

python - 打开其中的文件后删除包含的目录是否安全?

转载 作者:行者123 更新时间:2023-12-02 05:13:17 27 4
gpt4 key购买 nike

我有一些代码需要返回文件对象并清理包含的目录,例如:

def create_file():
# create a temp directory: temp_dir
# generate a file inside the directory: filename

file_obj = open(filename, 'rb')
shutil.rmtree(temp_dir)
return file_obj

如果我有文件句柄(open() 的结果),删除包含的目录是否安全?

最佳答案

取决于你如何定义“安全”。在 Linux 机器上:

>>> p = os.path.join(os.getcwd(), "tmpdir")
>>> def foo(p):
... os.makedirs(p)
... f = open(os.path.join(p, "tmp.txt"), "w")
... shutil.rmtree(p)
... return f
...
>>> f = foo(p)
>>> f
<open file '/home/bruno/tmpdir/tmp.txt', mode 'w' at 0x7f14f65c2270>
>>> f.write("foo")
>>> f.close()
>>> f.name
'/home/bruno/tmpdir/tmp.txt'
>>> open(f.name).read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '/home/bruno/tmpdir/tmp.txt'
>>>
>>> os.listdir(p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/home/bruno/tmpdir'

编辑

So I can't remove the containing directory if I'm going to write to the file, do I?

嗯,显然不是。无论如何,这没有任何意义,因为,正如您问自己的那样:

where does write() write in such case?

这是一个好问题......

"file"和“目录”只是操作系统给出的表示。从技术上讲,操作系统将文件数据写入所需的位置(并且可以分散在不同位置的多个 block 中),并将元数据写入已知位置,告诉哪些 block 属于哪个"file"以及哪个"file"属于哪个“目录”。

此外,除非您另外指定,否则 IO 会被缓冲,因此 write() 不一定会立即写入任何内容。话虽这么说,使用无缓冲的文件(和/或在写入后刷新文件)不会改变上述代码片段的行为(至少在使用 python 2.7 的 ubuntu-linux 上不会)。

但无论如何:打开一个文件以在目录中写入,然后在使用该文件之前删除整个目录的整个想法让我觉得有些可疑(这是轻描淡写的 xD) - 操作系统应该拒绝删除该目录,因为它里面有一个文件,或者应该删除该文件和目录,那么写入一个无论如何都没有人能够读取的文件有什么意义?

现在这看起来确实像一个 XY 问题,所以也许解释(在一些上下文中)为什么你“需要”这么奇怪的东西会有所帮助。另请注意,Python 有 some support for temporary files and directories已经

关于python - 打开其中的文件后删除包含的目录是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874887/

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