Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очистить текстовый файл 
:(
    Опции темы
EvgenyTS
Дата 5.2.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно ли очистить текстовый файл без удаления? MFC
PM MAIL   Вверх
mrbrooks
Дата 5.2.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



EvgenyTS, создать заново с таким же именем.
PM MAIL   Вверх
voov
Дата 5.2.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Почему нет? Открой файл с флагом modeCreate.
Цитата

CFile::modeCreate   Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.

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


Шустрый
*


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

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



А если этот файл постоянно считывает рабочий поток? Можно ли остановить поток из-вне? я так понимаю что ф-ция afxEndString завершает его при вызове в потоке.
Спасибо за идею.
Но при попытке : A sharing violation occurred while accessing и путь написан к файлу

Это сообщение отредактировал(а) EvgenyTS - 5.2.2009, 10:54
PM MAIL   Вверх
mrbrooks
Дата 5.2.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(EvgenyTS @  5.2.2009,  10:50 Найти цитируемый пост)
Можно ли остановить поток из-вне?

можно. поток ты же создаешь.
PM MAIL   Вверх
EvgenyTS
Дата 5.2.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mrbrooks @ 5.2.2009,  10:53)
Цитата(EvgenyTS @  5.2.2009,  10:50 Найти цитируемый пост)
Можно ли остановить поток из-вне?

можно. поток ты же создаешь.

так завершение должно быть внутри потока...Как это исправить? Если можно на примере.
PM MAIL   Вверх
mrbrooks
Дата 5.2.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(EvgenyTS @  5.2.2009,  10:55 Найти цитируемый пост)
так завершение должно быть внутри потока...

дык ты хочешь принудительно остановить поток или, что бы он до конца возложенных на него задач работал.

Если первое - то тут надо юзать функции работы с потоком.
Если второе - то тут уже, как вариант, можно создавать событие (Event) и отлавливать его через ожидание завершения(WaitForSingleObjects).

По поводу примеров поищи по форуму - не раз обсуждалось.
PM MAIL   Вверх
voov
Дата 5.2.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



EvgenyTS, ты бы лучше сразу описал всю картину и задал вопрос поконкретнее.
Я так понял, что когда ты пытаешься очистить файл, тебе не дают к нему доступа, так как он уже открыт из другого потока. Если так, то файл в потоке нужно открывать с флагом CFile::shareDenyNone. 
PM MAIL   Вверх
EvgenyTS
Дата 5.2.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(voov @  5.2.2009,  11:12 Найти цитируемый пост)
Если так, то файл в потоке нужно открывать с флагом CFile::shareDenyNone.  

 Так я так и открываю файл, а доступа к файлу всеравно нет

Это сообщение отредактировал(а) EvgenyTS - 5.2.2009, 11:35
PM MAIL   Вверх
voov
Дата 5.2.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Покажи код как ты его открываешь в потоке и там где хочешь стереть файл
PM MAIL   Вверх
EvgenyTS
Дата 5.2.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



   CStdioFile File(Path,CFile::shareDenyNone|CFile::typeText); -открыл

CStdioFile File(Path,CFile::modeCreate|CFile::typeText); -удалил(создал новый)


Это сообщение отредактировал(а) EvgenyTS - 5.2.2009, 15:06
PM MAIL   Вверх
voov
Дата 5.2.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Попробуй затирать так
Код

CStdioFile File(Path,CFile::modeCreate|CFile::typeText|CFile::shareDenyNone); -удалил(создал новый)

PM MAIL   Вверх
EvgenyTS
Дата 5.2.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(voov @  5.2.2009,  16:08 Найти цитируемый пост)
CStdioFile File(Path,CFile::modeCreate|CFile::typeText|CFile::shareDenyNone

 Странно, но заработало. Спасиб.
+
PM MAIL   Вверх
voov
Дата 5.2.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Цитата(EvgenyTS @  5.2.2009,  16:17 Найти цитируемый пост)
Странно, но заработало.

Ничего странного. Сам подумай. В потоке ты открываешь файл, не запрещая никому получать доступ, читать или писать в этот файл. А там, где хочешь затереть его, пытаешься получить исключительные права на файл. Но! Файл уже открыт в другом месте и получить исключительные права на него не получается. Поэтому и не работало. А теперь смотри, что поменялось - CFile::shareDenyNone - открываешь файл, но при этом не возражаешь, чтобы ктото еще чтото с ним делал. Вот и все чудо ;)
PM MAIL   Вверх
EvgenyTS
Дата 5.2.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасиб, за объяснение. Дошло! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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