Xamarin.Mac 设置文件只读

来源:互联网 发布:java网盘系统源码 编辑:程序博客网 时间:2024/05/16 15:51

你所浪费的今天,是昨天死去的人奢望的明天                               2016年8月18日 星期四

Xamarin.Mac 设置文件只读


做项目时,程序运行时生成的一些文件往往不希望用户来更改,不然用户的更改可能会导致程序运行的不正常,所以我们就要在代码中设置文件只读。


那么如何设置文件只读呢?我们先来观察一下文件的属性,随便选择一个文件右键点击显示简介如下图所示:



从上图我们可以看到,实现文件只读有两种方式:

1.锁定文件

2.设置文件的读写权限

那么我们在代码中设置文件只读,也可以从这两方面入手。我们不难猜出,显示简介中的这些信息就是文件的一些属性,只要我们知道如何修改文件的属性,那么问题基本就可以解决了。


网上搜索资料不难发现有一个类NSFileManager可以用来操作文件,NSFileManager中有 两个方法GetAttributes和SetAttributes。通过这两个方法我们可以获取和设置文件的属性。


首先我们尝试通过第一种方式—锁定文件来实现文件的只读,通过GetAttributes方法我们可以获取到文件的属性,它是一个NSFileAttributes对象,NSFileAttributes中有一个属性Immutable就是用来设置文件上锁的。Immutable翻译成中文就是”不可改变的“,如果英文不好猜不出这个属性的作用时,我们也可以在显示简介中切换文件的锁定状态然后再代码中获取文件的属性值来对比查看锁定状态对应的是文件属性的那个值。这样一来,设置文件只读就可以通过以下四行代码来简单实现了。

NSFileManager fm = new NSFileManager();NSFileAttributes fa = fm.GetAttributes("你的文件路径");fa.Immutable = true;fm.SetAttributes(fa, “你的文件路径");



下面我们尝试通过第二种方式—设置文件的读写权限来实现文件的只读。原理和方式一类似,这里就不过多赘述了,只不过这里我们要修改的属性是PosixPermissions,代码如下:

NSFileManager fm = new NSFileManager();NSFileAttributes fa = fm.GetAttributes("你的文件路径");fa.PosixPermissions = (short)292;fm.SetAttributes(fa, “你的文件路径");

这里我解释一下属性值为何设置为292。我们在维基百科中搜索File system permissions(https://en.wikipedia.org/wiki/File_system_permissions#User_private_group)可以知道文件的权限分为三部分组成:拥有者权限、组权限、其他人权限,每个部分由三位来表示,分别代表可读、可写、可执行。


 


那么我们设置文件制度的话Symbolic Notation就是 -r- -r- - r- -,对应的二进制表示就是0100100100,转换为10进制就是  


在维基百科中看文件的系统属性时有这么一段话:

Classic Mac Operating Systems' HFS do not support permissions, only file attributes: "Hidden" (does not show in directory listings); "Locked" (read-only); "Name locked" (cannot be renamed); and "Stationery" (copy-on-write).【翻译:经典的Mac操作系统的HFS不支持权限,只有文件属性:“隐藏”(不在目录列表中显示);“锁定”(只读);名称“锁定”(不能改名);和“文具”(写时复制)。】

我们在文件的属性中发现有HfsTypeCode这个属性,也许通过这个属性也能设置文件只读,有兴趣的小伙伴可以自己研究一下。

0 0
原创粉丝点击