我们正在使用自定义智能卡,通过 COM(通过 USB)接口读取和写入数据。
每当我们添加或更新记录时,都需要对卡进行一些管理,以确保更新其他信息(主要是指针)。卡上的信息基本上是一个 64k 字节的数组。在单个添加或更新时,数据在字节数组中的不同点被读取和写入。
我想强制执行一种以原子方式进行整个更新的方法。如果我们在写入过程中拔出智能卡,数据很容易损坏,特别是因为本质上它只是一个连续的字节数组,一个字节错位会破坏整个数组的有效性。我想让这种情况发生的机会尽可能小。
我研究过TransactionScope
,但这似乎主要用于数据库事务。这样的机制对我的问题有用吗,还是我应该寻找其他方法来强制我的软件块以有效的方式读写?
我们使用的智能卡由政府机构提供给我们,因此不会更改。它有一个存储芯片,与您在电话 SIM 卡上看到的相同,许多银行卡也有它(与磁条相反)。该卡是使用 ISO-7816-15 规范设计的。进出卡的接口最初是由另一个程序员设计的,他基本上对我说:我只处理字节输入和字节输出,我不做任何验证。这对我来说似乎很奇怪,因为我认为他有责任不让卡片如此容易损坏。显然它是我的。
我会研究更多的技术规格,尽管这让我走出了我的舒适区,除非我绝对需要,否则我不想弄乱他的代码。也许这张卡有一些比目前使用的更好的方法。
有一个简单的 READ 命令,它只支持一次读取 231 个连续字节。当我问他为什么会这样以及为什么我不能一次获得整个字节数组时,他说这就是所有卡的支持。所以阅读整个文件真的很尴尬。它变得更糟,因为一旦它“满”,它就应该跳到数组的开头。:S