Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> После fclose файлы всё равно залочены 
V
    Опции темы
Alexoid
Дата 19.3.2012, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Здравствуйте, программисты-консультаны!!!!!!
Возникла такая проблека у меня из разряда студенческих.
В общем записываю в файл данные из писем (сохраняю приаттаченные к письмам файлы) таким образом:

Код


void CMailerEvents::OnPOP3_Attach(char *pszData, char *pszFileName, int iLen, POP_ATTACH AttachStatus)
{
if(AttachStatus==ATTACH_NEWFILE)
    {
        char *pszTmp=new char [MAX_PATH];
        GetPrivateProfileStringA("General","Path",0,pszTmp,MAX_PATH,pszIniFile);
        strcat_s(pszTmp,MAX_PATH,"Tmp\\");
        strcat_s(pszTmp,MAX_PATH,pszFileName);
        fout=0;
        fout = fopen(pszTmp, "wb");
        delete pszTmp;
    }
    if(fout!=0)
        fwrite(pszData,1,iLen,fout);// fout-объявлен глобально в сpp-файле
    if(AttachStatus==ATTACH_ENDFILE)
    {
        if(fout!=0)
        {
            fclose(fout);
            fcloseall();//проходится дописывать
        }
        fout=0;
    }
}

Дело в, что после того как я закрываю файл ф-цией: "fclose" он остаётся заблокированным (немогу открыть другй программой пока не закрою свою). Из этой ситуации нашёл выход - добавил функцию fcloseall()-которая закрывает все файловые потоки, тогда мой файл становится доступным сразу.
Посмотрел как она написана, там цикл (от 3 до 512 ), пробегать повсем потокам, чтобы закрыть один как-то не профессионально, и нересурсоёмко.
Посоветуйте что нибудь!!!! smile 

PM MAIL   Вверх
borisbn
Дата 19.3.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



после fclose файл отпускается, так что проблема не в этом. есть подозрение, что  fout = fopen(pszTmp, "wb"); вызывается более одного раза.
поставь какой-нибудь вывод (::MessageBox например) сразу после этой строки


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alexoid
Дата 19.3.2012, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Да borisbn, Вы правы просто класс по приёму почты писался мной вот одну чтуку и неучёл, приходится много кодить.

Спассибо большое!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.