Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удалить файл во время работы приложения а не после закрытия окна

26K
23 мая 2008 года
metal_anton
27 / / 20.04.2008
Cуть в том что как я только запускаю свой код у меня сначало создается файл а потом сразу же должен удалиться,
удаление происходить и функция удаления ворачивает не NULL как и должна если всё нормально, но вот если консоль или приложение MFC или какое другое приложение не закрывается (окно всмысле) то файл висит к примеру на диске С смотрю разными менеджерами он весит не удалённый, как только закрываю окно то он сразу же пропадает в чём может быть проблема никто не сталкивался с этим??
вот код
Код:
#include <windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <stdio.h>
using namespace  std;
//   перевод  строки
LPCTSTR ToLPCTSTR (string   Path)
{
    LPCSTR from_string = Path.c_str();
    LPWSTR to_string = new WCHAR[512];
    MultiByteToWideChar(
        CP_ACP,         // code page
        MB_PRECOMPOSED, // character-type options
        from_string,            // string to map
        -1,             // number of bytes in string
        to_string,            // wide-character buffer
        256            // size of buffer
        );

    LPCTSTR to_string_return = to_string;
    return to_string_return;


};
void Create(string   Path,string   Name)
{
string   path ;
string   path1;
path = Path;
path1= path + Name;
CreateFile(ToLPCTSTR(path1),
           NULL,         
           NULL,
           NULL,
           CREATE_ALWAYS,
           NULL,
           NULL);
path.clear();
path.clear();
};

/*****************************************************************************
*                       функция   удаления файла                               *
******************************************************************************/
void Remove(string   Path)
{
    string   str;
    str = Path;
    LPCTSTR ss =  L"не  удалился";
    if(DeleteFile(ToLPCTSTR(str)) == NULL)
    {
        MessageBox(NULL,ss,NULL,MB_OK);

    };
    str.clear();
}

int main()
{
    string new_f("C:\\");//путь где создавать
    string new_n("123.txt");// имя файла
   Create(new_f,new_n);
   string ss1;
   ss1 = new_f+new_n;
   Remove(ss1);
   getchar();

}
16K
23 мая 2008 года
Alf&#225;
59 / / 12.01.2007
Закрой сначала файл, перед удалением.
9.3K
23 мая 2008 года
iridum
175 / / 26.08.2007
Не удаляется он потому что ты не закрыл хендл файла перед ф-ей Remove.
Вот что пишут в Win32Programmers reference: CloseHandle invalidates the specified object handle, decrements the object's handle count, and performs object retention checks. Once the last handle to an object is closed, the object is removed from the operating system.
А при закрытии программы этот самый хендл и чистится, соответственно файл удаляется. Соответственно тебе надо зделать такое

 
Код:
ss1 = new_f+new_n;
   CloseHandle(filehandle);
   Remove(ss1);

, де filehandle - хендл файла полученный из CreateFile
26K
23 мая 2008 года
metal_anton
27 / / 20.04.2008
Цитата: iridum

 
Код:
ss1 = new_f+new_n;
   CloseHandle(filehandle);
   Remove(ss1);

, де filehandle - хендл файла полученный из CreateFile


спасибо разобрался забыл просто вообще про этот хендл в остальных функциях закрывал а тут забыл хоть убей и не мог понять что за хз такое))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог