Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python跨平台隐藏文件_Python - Fatal编程技术网

Python跨平台隐藏文件

Python跨平台隐藏文件,python,Python,在*nix中,我可以简单地向文件添加一个,使其“隐藏”。还有一些方法可以使文件隐藏在windows中 python中有没有一种方法可以跨平台隐藏文件 目前: def write_hidden(file_name, data): file_name = '.' + file_name with open(file_name_, 'w') as f: f.write(data) 但正如我所说,这只适用于*nix系统。您可以这样做: import os import

在*nix中,我可以简单地向文件添加一个
,使其“隐藏”。还有一些方法可以使文件隐藏在windows中

python中有没有一种方法可以跨平台隐藏文件

目前:

def write_hidden(file_name, data):
    file_name = '.' + file_name
    with open(file_name_, 'w') as f:
        f.write(data)

但正如我所说,这只适用于*nix系统。

您可以这样做:

import os
import ctypes

FILE_ATTRIBUTE_HIDDEN = 0x02

def write_hidden(file_name, data):
    """
    Cross platform hidden file writer.
    """
    # For *nix add a '.' prefix.
    prefix = '.' if os.name != 'nt' else ''
    file_name = prefix + file_name

    # Write file.
    with open(file_name, 'w') as f:
        f.write(data)

    # For windows set file attribute.
    if os.name == 'nt':
        ret = ctypes.windll.kernel32.SetFileAttributesW(file_name,
                                                        FILE_ATTRIBUTE_HIDDEN)
        if not ret: # There was an error.
            raise ctypes.WinError()
这还没有经过测试,但应该可以正常工作

此外,您可能希望看到帮助我实现这一目标的其他问题:


不,没有一种跨平台的方法来创建隐藏文件,因为不同的操作系统有完全不同的实现。Windows版本基本上需要一个chattr()调用,而UNIX版本修改文件名。。。如果你的问题是如何用Python在Windows上创建一个隐藏文件,那么你就有更好的机会得到答案。你找不到一个同时做这两件事的抽象,这与Python无关,因为这是一个操作系统级的问题。在Python中工作的解决方案将在Perl、Ruby、C等中工作。应检查*nix部分的可能副本,以确保文件名没有以“.”开头。避免
ctypes.windl
。它缓存函数指针,其他库可能定义了不兼容的原型(即
restype
argtypes
、和
errcheck
)。此外,为了可靠性,您需要使用线程本地捕获的最后一个错误值。此外,您正在删除现有的文件属性。下面是考虑这些观察结果的示例代码:
kernel32=ctypes.windell('kernel32',use\u last\u error=True)
无效的\u文件\u属性=-1
文件属性隐藏=2
attrs=kernel32.GetFileAttributesW(文件名)
<代码>如果属性==-1:引发ctypes.WinError(ctypes.get\u last\u error())
<代码>属性|=文件属性_隐藏
if not kernel32.SetFileAttributesW(filename,attrs):引发ctypes.WinError(ctypes.get\u last\u error())