Как переименовать файл без копирования?

Тема в разделе "WASM.BEGINNERS", создана пользователем TOLSTOPUZ, 20 май 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    переименовать файл проще всего так:

    invoke CopyFile ; где даём для копии файла новое имя

    и сразу же
    invoke DeleteFile ; Удаляем старый файл.

    Но для этого нужно свободное место на диске для предварительного копирования.

    А если файл 2ГБ, а свободного места 500 мб?
    Можно ли переименовать файл напрямую Без копирования?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Но эта функция также использует
    копировать и удалить...
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Нет. Открой её в IDA.
     
  5. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    SHFileOperation
    параметры структуры SHFILEOPSTRUCT
    1) wFunc = FO_RENAME
    2) pFrom = Имя_файла
    3) остальные параметры на твое усмотрение.
     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    irrona
    Какая интерсная функция! Спасибо, будем изучать.

    [add] В догонку. Наверняка, все эти функции всё-равно сводятся к нескольким нативным, типа ntCreateFile и ntOpenFile ?
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Aspire
    Сначала там проверяют ДОС-имена, потом стоит ntOpenFile

    и
    7C82172F FF15 3010807C CALL DWORD PTR DS:[<&ntdll.NtSetInformationFile>] ; ntdll.ZwSetInformationFile