如何在 Fat32 上存储大文件

如何在 Fat32 上存储大文件

我想将一个大型视频文件存储在 FAT32 驱动器(~18 GB)上,但我发现由于文件系统的限制,这根本不可能实现。

是否存在一个简单的工具,可以将文件分割成可存储的较小部分,然后在我想要检索存档文件时重新组装它们?

或者有没有更好的方法在 FAT32 上存储大文件?

答案1

大多数文件归档器,例如7-Zip、WinZip 和 WinRAR 允许您将存档拆分为多个文件。如果速度很重要,您可以尝试禁用程序的压缩部分。

在 GNU/Linux 系统上,您可以使用分裂coreutils 包中的程序(例如split -b 4294967295 FOO /media/FATDISK/BAR将 FOO 拆分为 BARaa、BARab 等,然后cat /media/FATDISK/BAR?? > FOO重新组装)。Mac OS X 的命令行split实用程序以相同的方式工作。

答案2

如果您正在寻找此问题的快速解决方案,请参阅以7zip或为特色的其他答案split这更像是乐趣解决方案。

我最终编写了一个小型 Python 2 脚本来实现这一点。


# Author: Alex Finkel 
# Email: [email protected]

# This program splits a large binary file into smaller pieces, and can also 
# reassemble them into the original file.

# To split a file, it takes the name of the file, the name of an output 
# directory, and a number representing the number of desired pieces.

# To unsplit a file, it takes the name of a directory, and the name of an 
# output file.

from sys import exit, argv
from os import path, listdir

def split(file_to_split, output_directory, number_of_chunks):
    f = open(file_to_split, 'rb')
    assert path.isdir(output_directory)
    bytes_per_file = path.getsize(file_to_split)/int(number_of_chunks) + 1
    for i in range(1, int(number_of_chunks)+1):
        next_file = open(path.join(output_directory, str(i)), 'wb')
        next_file.write(f.read(bytes_per_file))
        next_file.close()
    f.close()
                
def unsplit(directory_name, output_name):
    assert path.isdir(directory_name)
    files = map(lambda x: str(x), sorted(map(lambda x: int(x), listdir(directory_name))))
    out = open(output_name, 'wb')
    for file in files:
        f = open(path.join(directory_name, file), 'rb')
        out.write(f.read())
        f.close()
    out.close()
        
    
if len(argv) == 4:
    split(argv[1], argv[2], argv[3])
elif len(argv) == 3:
    unsplit(argv[1], argv[2])
else:
    print "python split_large_file.py file_to_split output_directory number_of_chunks"
    print "python split_large_file.py directory name_of_output_file"
    exit()

答案3

另一个选择:使用splitGNU Coreutils 中的命令:

split --bytes=4G infile /media/FAT32drive/outprefix

将文件分割成 4 GB 的块,并将这些块保存到输出驱动器。

可以通过连接各块(文件名按字母顺序排列)来恢复原始文件。

有关使用信息,请参阅split手动的

Coreutils,包括split,应该在 Linux 和 Mac OS X 上默认安装。在 Windows 上,它可从 GnuWin32 获得,或者来自 Cygwin。

答案4

要在 vfat 上创建最大允许大小的文件(2³²-1 字节),请使用以下命令(在 bash 中):

split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix

或者,如果你不想使用 bash 的内联数学:

split --bytes=4294967295 infile /media/FAT32drive/outprefix

'--bytes=4G' 失败,因为 4G 等于 2³² 字节,这比 vFAT 上的最大文件大小正好多一个字节。

相关内容