gpt4 book ai didi

c# - 编写需要上传大于 4 gig 的文件的 FTP 客户端是否存在寻址问题?

转载 作者:太空狗 更新时间:2023-10-29 19:42:32 24 4
gpt4 key购买 nike

如果我的 FTP 客户端打算上传大小超过 4 gig 的文件,假设我正在传输数据,我的指针将在大约 4 gig 时撞到墙上,如果它是 32 位指针,对吧?我试图想象幕后发生的事情,但无法想象这是如何工作的……但它必须工作,因为我过去下载过比这更大的文件。

所以,我的问题有两个方面......客户端发生了什么(它是否需要是 64 位客户端,在 64 位机器上)以及服务器上发生了什么(IT 是否也必须是64 位机器?)

我意识到文件将被分解成更小的文件进行传输,但是程序是否会因为试图寻址文​​件中超过 4,294,967,295 标记的部分而崩溃?

我认为这是一篇相关的帖子,但我不确定他们得出了什么结论。答案似乎同时指出了指针(在他们的例子中是 PERL)和操作系统的局限性。 Why can't my Perl program create files over 4 GB on Windows?

最佳答案

客户端或服务器应该以 block 的形式读取数据(我会读取页面大小的倍数或类似的东西)并将 block 写入磁盘。无需将整个文件一次性全部放入 RAM。

在接收端类似这样的伪代码(错误检查和类似的省略):

chunk = new byte[4096];
while(int size = recv(socket, chunk, 4096)) {
write(file, chunk, size);
}

所以上面的示例是针对服务器的,客户端也会做类似的事情。

chunk = new byte[4096];
while(int size = read(file, chunk, 4096)) {
send(sock, chunk, size);
}

编辑:

处理您的评论。您必须记住的一件事是,文件中的偏移量在 32 位系统上不一定是 32 位的,它可以是 64 位的,因为它实际上不是指针,它只是从文件的开头。如果操作系统支持 64 位偏移量(现代 windows/linux/osx 都支持),那么您不必担心。如其他地方所述,操作系统尝试访问的文件系统也是一个因素,但我认为如果您有一个大于 4GB 的文件,那么它显然位于支持它的文件系统上;-)。

关于c# - 编写需要上传大于 4 gig 的文件的 FTP 客户端是否存在寻址问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com