1

我正在尝试进行文件操作。我想做的是从文件中删除一个字节,然后将文件的其余部分移动这么多字节到被删除的位置。我有这个代码:

f = open("file.txt", "r+b")
mm = mmap.mmap(f.fileno(), 0)
s=""
for i in range(10 - len(arg_list[0])) :
    s+="\0"
s+=arg_list[0]
index = 0

while mm[:10]:
    current_type_name = mm[:10].decode()
    if current_type_name == s:
        f.seek(110*index)
        f.truncate()
        f.write(mm[110*(index+1):])
    else:    
        mm = mm[110:]
        index += 1

除了 f.truncate() 函数外,一切正常。我已经尝试过 f.truncate(n) ,其中 n 是一个整数,但下面仍然出现错误。

错误:

File "main.py", line 109, in delete_type
    f.truncate()
OSError: [Errno 22] Invalid argument

我已经搜索了导致此问题的原因,有人说它与文件路径或文件不存在有关。但我 %100% 确定我正在通过控制台以相同的路径运行文件,并且文件已经存在。我也尝试过使用 \ 和 r"" 方式的绝对路径。但我仍然遇到同样的错误。

还有一件事,当我尝试注释 f.truncate() 并重新排列 while 循环以不陷入无限循环时,代码正在运行。而且我在另一个函数中使用代码结构,令人惊讶的是它不会出错。

4

0 回答 0