我正在编写程序,需要一些指导。本质上,我试图确定文件是否附加了一些标记或标志。有点像 HTTP header 的属性。
如果存在这样的标记,该文件将以某种方式进行操作(移动到另一个目录)。
我的问题是:
我到底应该在哪里存储这个标志/标记?文件是否有类似于 HTTP Headers 的系统?我不想访问或操作文件的内容,只是可以在不破坏实际文件的情况下编辑的某种文件属性——它必须在文件类型中相当通用,因为我的潜在文件类型域未绑定(bind)。我有一些使用 Web API 的经验,所以我熟悉 HTTP header 和 json。 Windows中是否存在用于本地文件的类似系统?我对任何拥有程序员在尝试将“元数据”存储在文件中以便以后访问它们时使用的常用技术的专业/行业知识的人特别感兴趣。或者,如果有人知道可以指出我的位置,因为我不确定我应该研究什么。
郑重声明,我打算使用 Golang 或 Python 为 Windows 编写一个程序。我要操作的文件可能都是常见的文件(.docx、.txt、.pdf 等)
最佳答案
您希望添加的元数据最好保存在单独的文件或所有文件的数据库中。
或者在另一个具有相同名称和不同扩展名或前缀的文件中,您可以将其隐藏。
依赖文件系统非常棘手,您的数据将受到存储文件的文件系统的限制和功能的约束。 而且,您不能指望您的数据保持完好无损,因为任何应用程序都可能希望更改这些标志。
其中一些具有非常具体、明确定义的用途,例如创建时间、修改时间、访问时间...
看,如果您只需要标记文档,您可能希望使用创建时间,它在文档的整个生命周期内(直到被复制)保持不变来存储您的标记。 :D
非常肮脏的生意,不专业,不可靠等等。
但这是一个解决方案。可怜的一个,但存在。
我不知道 FAT32 或 NTFS 文件系统是否支持任何额外的标记位,操作系统已经使用的位除外。 Unixes EXT 系列 FS 确实支持一些额外的位。甚至你应该小心,以防其他一些重要的应用程序将它们用于某些事情。
Mac OS 本身可能支持一些元数据,但我不能 100% 确定。
在 Windows 上,您还有一个选项可以将更多数据与文件相关联,但我也不会使用它。
嗯,NTFS 文件系统(FAT 不支持)有一个称为流的特性。
In essential, same file can have multiple data streams under itself. I.e. You have more than one file contents under same file node.
更清楚。同一个文件包含两个不同的文件。
当您正常打开文件时,应用程序只能看到主流。应用程序必须检查其他流是否存在并选择他们想要跟随的流。
因此,您可以选择将元数据存储在文件的第二个流下。
但是,如果所有流都被占用怎么办?
更重要的是,防病毒程序可能会阻止您出于偏执狂访问元数据,或者至少请求许可。 我不知道为什么 MS 包含该选项,可能是为了文件复制或其他原因,但坏黑客利用了这样一个事实,即您可以在现有的常规文件下存储一些数据,但没人知道。
想象一个病毒将其复制到另一个已经存在的程序流中。
启动它所需的一切,而不是下次运行时的旧程序,是添加到任务调度程序的批处理脚本,该脚本翻转两个流,使病毒数据成为主要流。
恶作剧!所以当这个功能开始被滥用的时候,杀毒软件就开始限制多流文件,就好像这个功能不存在一样。
如果你想使用操作系统的技术添加一些元数据,使用 Windows 注册表, 但即使那样也是不明智的。
告诉你什么? 不要将元数据添加到文件、组织单独的文件或在与您引用的文件同名且位于同一文件夹中的特殊文件中为您的数据编制索引。
关于python - 类似于本地文件的 HTTP Headers 的属性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500810/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当