Skip to content

How to rename files in MemFS? #452

Closed

Description

@pspot2

Hi,

there doesn't seem to be a way to rename files in MemFS without copying them around. Looks like MemFS tries to apply os.rename() if the file can be seen by the OS (which is not the case for MemFS). The only remaining way is to use something like fs.move that duplicates the file before removing the old one. On systems with limited memory this obviously doesn't work. Example: a MemFS with a total size of 10 GB and a single file of 8 GB lying on it. How to rename this file?

Activity

  1. lurch commented on Mar 10, 2021

    @lurch
    Contributor

    Hmmm, interesting point...

    https://docs.pyfilesystem.org/en/latest/guide.html#moving-and-copying says "These move and copy methods are optimized where possible, and depending on the implementation, they may be more performant than reading and writing files.". However it looks like MemFS doesn't have optimised move or movedir methods and instead just drops through to the base fs.move, which as you note does a copy-then-delete.

    I'm not familiar enough with the MemFS to know if there's a good reason why it doesn't provide optimised move / movedir methods though (and I don't have time to look into it ATM). But feel free to experiment and put a PR together... 😉

  2. willmcgugan commented on Mar 11, 2021

    @willmcgugan
    Member

    MemFs certainly could do a rename operation rather than a copy. It just hasn’t been implemented.

  3. added this to the v2.4.13 milestone on Mar 25, 2021
  4. althonos commented on Mar 26, 2021

    @althonos
    Member

    This was implemented in #472, and will be available in v2.4.13 when it's released. Cheers!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions