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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к безымяный файл запрешен, Visual C++ 6.0 
:(
    Опции темы
GoodMan
Дата 9.3.2003, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



Код

//открываем файл
CFile file("index.htm", CFile::modeRead | CFile::modeWrite);

//читаем данные
char s[1000001];
int bytesRead = file.Read(s, 1000000);
s[bytesRead] = 0;
CString str = s;

   str.Replace("script", "");

file.Write((LPCTSTR)str, bytesRead);
file.Close();


При выполнении данного кода выдается сообщение: Доступ к безымяный файл запрешен

in than problem?
PM MAIL   Вверх
Step
Дата 9.3.2003, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



возможно это файл используется, возможно ты не правильно указываеш имя, или данный файл отсутствует в директории, надо указать правильный путь


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 9.3.2003, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Эх, вы, знатоки MFC smile.gif
Вот так надо открывать smile.gif
Код

CFile file("index.htm", CFile::modeReadWrite);

и все пучком будет smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 9.3.2003, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Baa врядли это поможет, операция или даст тот же результат.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 9.3.2003, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Step, может проверишь сначала? wink.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
GoodMan
Дата 9.3.2003, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



Цитата
Эх, вы, знатоки MFC
- я только начал изучать Visual C++.

Спасибо Baa. Получилось.

Код


//открываем файл
CFile file("index.htm", CFile::modeReadWrite);

//читаем данные
char s[1000001];
int bytesRead = file.Read(s, 1000000);
s[bytesRead] = 0;
CString str = s;

//изменяем данные
str.Replace("script", "");

//новый размер
bytesRead = sizeof(str);

//сохраняем данные
file.Write((LPCTSTR)str, bytesRead);
file.Close();


Метод Replace возвращает не 0, тем не менее, ни каких изменений в файле не обнаруживается.
Что на это раз я сделал не так?


Это сообщение отредактировал(а) GoodMan - 9.3.2003, 08:25
PM MAIL   Вверх
Baa
Дата 9.3.2003, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Вот smile.gif правд все это великие извращения... я бы по-другому все сделал smile.gif
Код

//открываем файл
CFile file("c:\\333.htm", CFile::modeReadWrite);

//читаем данные
char s[1000001];
int bytesRead = file.Read(s, 1000000);
s[bytesRead] = 0;
CString str = s;

//изменяем данные
str.Replace("script", "");

//новый размер
bytesRead = str.GetLength();

file.SetLength (0);
//сохраняем данные
file.Write(str.GetBuffer(), bytesRead);
file.Close();



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
GoodMan
Дата 9.3.2003, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



А как по другому? Если можно, приведи пример пожалуста.

Мне важно, что бы эти изменения в htm - файлах происходили с наибольшей скоростью.
Я пытаюсь написать чистильщик сайтов, загруженных Teleport или Offline Explorer.
Хочу убрать из html страниц "ненужную" информацию, которая не нужна в off-line.

На Delphi эта программа написана, но она работает медленно.


PM MAIL   Вверх
Baa
Дата 9.3.2003, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



да мой способ более косметический... например выделение точного количества памяти под файл...
а вообще, чистый API работает быстрее, чем MFC.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
GoodMan
Дата 9.3.2003, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



да уж "косметический" - в файле (index.htm) остается только:

Код
<HTM


все остальное содержимое страницы улетучивается, после сохранения в файл.
Блин как это все в Delphi просто:

Код
//**********************************************************************************************************************
//      удаляем скрипт
//**********************************************************************************************************************

       PosHref := Pos('<script', TempText);
       if (PosHref <> 0) and (Form1.chDeleteScript.Checked) then
           begin
             //определяем начальный индекс ссылки
lab2:
             MyPos := Pos('<script', Copy(TempText, PosHref + 8, Length(Text) - PosHref - 8));
             if MyPos <> 0 then
                begin
                  MyPos := MyPos + 7 + PosHref;
                  if Pos('</script>', Copy(TempText, PosHref, MyPos - PosHref)) = 0 then
                     begin
                      PosHref := MyPos;
                      goto lab2;
                    end;
                end;

             FirstHref := PosHref;

             //определяем конечный индекс ссылки
             LastHref := Pos('</script>', Copy(TempText, PosHref, (Length(Text) - PosHref))) + 8 + PosHref;

             //убераем неработающую ссылку
             TempText := DeleteSubString(TempText, FirstHref, LastHref - FirstHref);
             Text := DeleteSubString(Text, FirstHref, LastHref - FirstHref);
             goto lab1;

           end;


Это сообщение отредактировал(а) GoodMan - 9.3.2003, 09:31
PM MAIL   Вверх
Baa
Дата 9.3.2003, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Дык я ж токо твой код переделывал... а чего он с файлом делает я и не сморел...
А про косметику - всмысле, что если бы я писал все с 0, то написал бы по-другому.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
GoodMan
Дата 9.3.2003, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



Ладно, упростим задачу:

1. Метод Replace справляется со своей задачей.
Т.е. он в файле заменяет подстроки "script" на "".
Это я проверил с помощью AfxMessageBox(str);

2. Сохранение в файл производится не корректно.
Т.е. то, что мне показывала функция AfxMessageBox НЕ СОХРАНЯЕТСЯ В ФАЙЛ.
Ответственность за это несет следующий код:

Код

file.SetLength (0);
file.Write((LPCTSTR)str, sizeof(str));
file.Close();


ВОПРОС: Что надо сделать, что бы содержимое переменной str сохранялось в файл корректно?

PM MAIL   Вверх
Baa
Дата 9.3.2003, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Ну не знаю... вот ЭТОТ код отлично работает...
Код

CFile file("c:\\333.htm", CFile::modeReadWrite);

//читаем данные
char* s = new char [(unsigned)file.GetLength ()+1];
int bytesRead = file.Read(s, (unsigned)file.GetLength ());
s[bytesRead] = 0;
CString str = s;
delete [] s;

//изменяем данные
str.Replace("script", "");

//новый размер
file.SetLength (0);
//сохраняем данные
file.Write(str.GetBuffer(), str.GetLength ());
file.Close();



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
GoodMan
Дата 9.3.2003, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2003
Где: Украина, Днепропе тровск

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



Спасибо Baa. Этот код действительно работает.

Если можно последний вопрос:
Как содержимое переменной str преобразовать к нижнему регистру (UpperCase).
Это для того, что бы удалялись все подстроки "script" в переменной str.



надо было раньше зайти сюда: C / C++ / Visual C++ >>> Файлы, Директории и Диски тогда бы этих глупых вопросов небыло.

Это сообщение отредактировал(а) GoodMan - 9.3.2003, 22:07
PM MAIL   Вверх
Baa
Дата 10.3.2003, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



str.MakeLower ();


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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