当我使用的python-libtorrent实现一个客户,我觉得在GitHub上的例子
import libtorrent as lt
import time
ses = lt.session()
ses.listen_on(6881, 6891)
e = lt.bdecode(open("test.torrent", 'rb').read())
info = lt.torrent_info(e)
h = ses.add_torrent(info, "d:\\temp")
while (not h.is_seed()):
s = h.status()
state_str = ['queued', 'checking', 'downloading metadata', \
'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
print s.download_rate
print '%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
(s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
s.num_peers, state_str[s.state])
time.sleep(1)
它工作正常。 但它会下载所有的包含文件
我想询问用户选择文件和客户机应只下载特定文件。
如何 ? 谢谢。
首先,你需要找出哪颗属于所选择的文件/文件。 为了做到这一点,你首先需要找出你的文件的索引。 这样做是通过info.files去那么简单()
i=0
for f in info.files():
if fileIndex == i:
fileStr = f
break
i += 1
您可以确认这是通过打印其路径正确的文件:
print fileStr.path
现在,你需要找到该文件拼凑映射和分配优先级(0表示不下载)
h = ses.add_torrent(info, "d:\\temp")
pr = info.map_file(fileIndex,0,fileStr.size)
n_pieces = pr.length / info.piece_length() + 1
for i in range(info.num_pieces()):
if i in range(pr.piece,pr.piece+n_pieces):
h.piece_priority(i,7)
else:
h.piece_priority(i,0)
现在,您可以下载的文件如前。 请记住,你现在需要停止通过检查,因为你不进入种子模式之前的进度下载:
while (not h.is_seed()):
s = h.status()
state_str = ['queued', 'checking', 'downloading metadata', \
'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
print s.download_rate
print '%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
(s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
s.num_peers, state_str[s.state])
if s.progress>=1:
break
time.sleep(1)
没有与torrent_handle.prioritize_files或torrent_handle.file_priority更为简单的方法
看到libtorrent参考: http://www.rasterbar.com/products/libtorrent/manual.html#torrent-handle