代码之家  ›  专栏  ›  技术社区  ›  Piotr Czapla

“A+”模式是否允许随机访问所有系统上的文件?

  •  2
  • Piotr Czapla  · 技术社区  · 15 年前

    根据 documentation 打开功能的 “a”表示追加,在某些UNIX系统上,这意味着所有写入操作都追加到文件结尾,而不管当前的查找位置如何。

    “a+”是否允许随机写入所有系统上文件中的任何位置?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Karl Voigtland    15 年前

    在使用python 2.5.2的Linux系统上,写入使用“a+”打开的文件时,无论当前的查找位置如何,都会始终追加到末尾。

    下面是一个例子:

    import os
    
    if __name__ == "__main__":
    
        f = open("test", "w")
        f.write("Hello")
        f.close()
    
        f = open("test", "a+")
        f.seek(0, os.SEEK_SET)
        f.write("Goodbye")
        f.close()
    

    在我的系统上(尽管我看到了文件的开头),这会导致文件“test”包含:

    再见

    python文档说模式参数与stdio的相同。

    的Linux手册页 fopen() 是这样说的(强调增加了):

    以附加模式打开文件(a as 这个 第一字符 模式的原因 所有后续写入操作 此流发生在文件结尾, 好像前面有一个

    fseek(stream,0,SEEK_END);
    

    打电话。

    我的stdio引用说,在模式中附加一个“+”(即“a+”)意味着流是为 输入和输出 . 但是,在输入和输出之间切换之前,必须调用以显式设置文件位置。

    因此,添加“+”不会改变这样一个事实,即在某些系统中,在“a”或“a+”模式下打开的文件的写入操作将始终附加到文件末尾。