ติดตั้งจาก PyPI โดยใช้ pip install FATtools
(ง่ายกว่า) หรือดาวน์โหลดซอร์สโค้ด (หรือแพ็คเกจที่เผยแพร่) จากที่นี่
เกิดมาเพื่อจัดเรียงรายการไดเร็กทอรีใหม่ในตารางรูท FAT32 เพื่อรับมือกับข้อจำกัดของฮาร์ดแวร์เครื่องเล่น MP3 บางตัว ขณะนี้รองรับการอ่าน/เขียนเต็มรูปแบบใน Python 3 (ทั้ง 32- และ 64-บิต) สำหรับ FAT12/16/32 และ exFAT ระบบไฟล์เพื่อการแฮ็กและการกู้คืน
นอกจากนี้:
มีการนำคุณสมบัติต่อไปนี้ไปใช้ (ส่วนใหญ่ใน Python โดยมีการเรียก ctypes สองสามรายการเพื่อจัดการดิสก์ Win32 โดยกำเนิด ความเข้ากันได้กับ Linux ไม่ได้ทดสอบเป็นประจำ):
แน่นอนว่าเนื่องจากระบบไฟล์เป็นเรื่องที่ซับซ้อนและละเอียดอ่อนอย่างยิ่ง และอาจมีข้อบกพร่องใหญ่ๆ เกิดขึ้น คุณจะต้องใช้มันโดยรับความเสี่ยงเอง! แต่ตอนนี้ดูเหมือนว่าจะค่อนข้างเสถียรและใช้งานได้แล้ว
พื้นที่ที่เปราะบางที่สุด (และอาจมีข้อบกพร่อง) คือกลไกการแคชที่ทำงานในรูปแบบต่างๆ:
จริงๆ แล้ว ความเร็ว I/O นั้นใกล้เคียงกับความเร็วของระบบมากกว่า
รหัสคือ GPLed (ดูที่ GPL.TXT)
[1] จริงๆ แล้วการรองรับ VHDX Log นั้นจำกัดอยู่ที่ความสามารถในการเล่นซ้ำเท่านั้น
[2] ที่จริงแล้วเราสามารถแบ่งพาร์ติชันด้วย GPT 8 TB VHDX พร้อมเซกเตอร์ 4K และฟอร์แมตด้วย FAT32 และใช้งานได้อย่างมีความสุขใน Windows 11 อย่างไรก็ตาม Windows 11 CHKDSK รายงานไม่เกิน 4 TB ไบต์ (ในขณะที่นับ คลัสเตอร์ อย่างถูกต้อง ). นอกจากนี้ FORMAT เองก็ไม่สามารถใช้รูปแบบ FAT32 ที่ถูกต้องตามกฎหมายดังกล่าวกับดิสก์ขนาด 8 TB ได้
แพคเกจจะติดตั้งสคริปต์ fattools
คุณสามารถใช้สิ่งนี้เพื่อดำเนินการบรรทัดคำสั่งง่ายๆ
fattools mkvdisk -s 8T --large-sectors image.vhdx
fattools mkfat -t exfat -p gpt image.vhdx
fattools mkvdisk -b image.vdi delta.vdi
fattools wipe image.vhd
fattools imgclone image.raw image.vhd
โปรดทราบว่าขนาดภาพที่ได้จะลดลงหาก: 1) โวลุ่มถูกจัดเรียงข้อมูล; 2) ตารางไดเร็กทอรีถูกทำความสะอาดและย่อขนาด; 3) พื้นที่ว่างถูกล้าง (ศูนย์) มาก่อน
fattools imgclone \.PhysicalDrive2 image.vhd
fattools ls image1.vhd/py* image2.vdi/py*
fattools cp C:Python39Libsite-packages image.vhd/Python39/Lib
fattools cp image.vhd/Python39 C:ProgramData
fattools cat image.vhd/readme.txt
fattools rm image.vhd/Python39
# -*- coding: cp1252 -*-
from FATtools.Volume import *
disk = vopen('MyDiskImage.img', 'r+b', 'disk')
from FATtools import partutils
gpt = partutils.partition(disk)
from FATtools import mkfat, Volume
part = Volume.vopen('MyDiskImage.img', 'r+b', 'partition0')
mkfat.exfat_mkfs(part, part.size)
fattools reordergui
# -*- coding: cp1252 -*-
from FATtools.Volume import *
# Assuming we have DirA, DirB, DirC in this disk order into X:
root = vopen('X:', 'r+b')
new_order = '''DirB
DirC
DirA'''
root._sortby.fix = new_order.split('n') # uses built-in directory sort algorithm
root.sort(root._sortby) # user-defined order, in _sortby.fix list
root.sort() # default ordering (alphabetical)
# -*- coding: cp1252 -*-
from FATtools.Volume import vopen, vclose
from FATtools.mkfat import exfat_mkfs
from os.path import join
import os
real_fat_fs = 'F:' # replace with mount point of your file system
# Open and format with FATtools
fs = vopen(real_fat_fs, 'r+b',what='disk')
exfat_mkfs(fs, fs.size)
vclose(fs)
# Write some files with Python and list them
T = ('c','a','b','d')
for t in T:
open(join(real_fat_fs, t+'.txt'), 'w').write('This is a sample "%s.txt" file.'%t)
print(os.listdir(real_fat_fs+'/'))
# Open again, and sort root with FATtools
fs = vopen(real_fat_fs, 'r+b')
fs.sort()
vclose(fs)
# Check new table order with Python
print(os.listdir(real_fat_fs+'/'))
# -*- coding: cp1252 -*-
from FATtools.Volume import vopen, vclose
from FATtools.mkfat import exfat_mkfs
from FATtools.partutils import partition
# Open & create GPT partition
o = vopen('\\.\PhysicalDrive1', 'r+b',what='disk')
print('Partitioning...')
partition(o, 'mbr')
vclose(o)
# Reopen and format with EXFAT
o = vopen('\\.\PhysicalDrive1', 'r+b',what='partition0')
print('Formatting...')
exfat_mkfs(o, o.size)
vclose(o) # auto-close partition AND disk
# Reopen FS and write
print('Writing...')
o = vopen('\\.\PhysicalDrive1', 'r+b')
# Write some files with FATtools and sort them
T = ('c','a','b','d')
for t in T:
f = o.create(t+'.txt')
f.write(b'This is a sample "%s.txt" file.'%bytes(t,'ascii'))
f.close()
o.sort()
vclose(o)
โปรดดูภายในไดเร็กทอรี 'ตัวอย่าง' เพื่อดูตัวอย่างการใช้งานเพิ่มเติม