Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.91
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
#1

Как удалить файл только для чтения? - C++

19.07.2010, 13:28. Просмотров 5846. Ответов 19
Метки нет (Все метки)

Пишу функцию поиска файлов в указанной директории:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void Delfil(char temp[], int atrb)
{
    if(atrb)
    {
        int key=0;
        cout<<temp<<" - Только для чтения.  \n1. Удалять? 2. Пропустить? \n";
        cin>>key;
        if(key==1)
            remove(temp);
        else
            cout<<temp<<" - пропущен\n";
    }
    else
    {
        cout<<temp<<" - удален\n";
        remove(temp);
    }
 
}
 
void Scan(char path[], char mask[],int indel)
{
    strcat(path,mask);
    _finddata_t *find=new _finddata_t;
    long done=_findfirst(path,find);
    int result=done;
    while(result!=-1)
    {
            char tempfile[MAX_PATH];
            strcpy(tempfile,path);       //получаем временный путь
            int len=strlen(tempfile);
            tempfile[len-3]='\0';        //удаляем маску в пути
            strcat(tempfile,find->name);     //записываем имя файла к пути
            int atr=find->attrib&_A_RDONLY;      //проверка на только для чтения
            Delfil(tempfile,atr);
            tempfile[0]='\0';
        result=_findnext(done,find);
    }
    _findclose(done);
    delete find;
}
Простые файлы функция удаляет, когда же доходит дело до только для чтения, компилятор переходит в функцию удаления файлов, проходит через строку: remove(temp); и всё равно не удаляет файл, подскажите как быть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2010, 13:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как удалить файл только для чтения? (C++):

Как создать член класса только для чтения - C++
Хочу создать член класса только для чтения. Можно, конечно, поместить член в раздел private и написать метод для получения его значения: ...

Как открыть файл одновременно для чтения и для записи? - C++
Делаю вот так, но ничего не получается.:( std::fstream inOutCredit(&quot;credit.dat&quot;, std::ios::ate | std::ios::binary); if...

Как открыть файл для чтения в БИНАРНОМ режиме? - C++
Друзья! Файл, который надо открыть БИНАРНЫЙ, в нём два байта. Содержание файла 33 20 00 00 имя &quot;input&quot; Вот по логике вещей пра...

Как создать один файл для чтения и записи одновременно? - C++
Пробовал перезапись, но содержимое файла терялось while (file1.hasNext()) { file2.write(file.nextInt() + &quot; &quot;); ...

Как передать файл в функцию для записи/чтения (разные функции) - C++
Собственно сабж. Во первых есть вот такой блок в main: ofstream f1(&quot;F1.txt&quot;); cout&lt;&lt;&quot;Введите элементы в файл 1&quot;&lt;&lt;endl; for (i=0;...

Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. - C++
ЗАДАНИЕ ПО ЭКЗАМЕНУ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ С++ (можно писать и на С. не запрещается) Всё по сабжу ниже. Дан текстовый файл...

19
o-user
244 / 201 / 7
Регистрация: 03.02.2009
Сообщений: 786
19.07.2010, 13:33 #2
Попробуйте у найденного файла сбрасывать атрибут \"только для чтения\", а потом уже удалять файлы.
0
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
19.07.2010, 13:39  [ТС] #3
подскажите каким методом сбрасывать атрибут? я этого не знаю

Добавлено через 4 минуты
перефразирую вопрос, как найденному файлу программно установить атрибут только для чтения либо как сбросить?
0
o-user
244 / 201 / 7
Регистрация: 03.02.2009
Сообщений: 786
19.07.2010, 13:47 #4
Есть команда
C++
1
_chmode
Это она и есть.
Ее Описание в помощи к С++.
1
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
19.07.2010, 13:52  [ТС] #5
разве _chmode не относиться только к работе с фтп файлами?
0
o-user
244 / 201 / 7
Регистрация: 03.02.2009
Сообщений: 786
19.07.2010, 13:57 #6
Неа... Имено атрибуты локальных файлов.
0
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
19.07.2010, 14:00  [ТС] #7
хорошо, другой вопрос, если не снять атрибут только для чтения, то файл нельзя удалить?
Почему спрашиваю, мы этого ещё не изучали, но в задании по этой теме стоит цель сделать программу которая удаляет всю директорию, если есть файлы только для чтения то спросить удалить ли их, если удалить то удаляем, а вот _chmode мы не изучали...
0
o-user
244 / 201 / 7
Регистрация: 03.02.2009
Сообщений: 786
19.07.2010, 14:04 #8
Вот тут подсказать не смогу... Может что-то упустили при изучении...
0
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
19.07.2010, 14:16  [ТС] #9
понял, спасибо за ответ буду у препода спрашивать тогда
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
19.07.2010, 16:48 #10
Вот Вам две функции из WinAPI, надеюсь - пригодятся
GetFileAttributes
SetFileAttributes
1
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
19.07.2010, 18:30  [ТС] #11
easybudda, WinApi мы будет изучать дальше по теории, сейчас мы изучаем с++, я начинающий программист, спасибо за функции я кое что в них понял, но не пойму как их прикрутить к с++
Т.е. резюмируя все советы которые я получил подводя черту я понял чтоб удалить файл только для чтения необходимо сменить атрибуты файлу, а потом уж его удалять, другого способа нет?
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.07.2010, 04:32 #12
C
1
remove(temp);
попробуй сделать прогу, которая просто удаляет файл для чтения
посмотри, что возвращает remove()
если она не возращает ноль, выполни perror("");
0
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
30.07.2010, 19:33  [ТС] #13
Цитата Сообщение от accept Посмотреть сообщение
посмотри, что возвращает remove()
если она не возращает ноль, выполни perror("");
тема до сих пор актуальна, подскажите кто знает, как мне посмотреть что возращает remove() и какой синтаксис у perror("");
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
30.07.2010, 19:40 #14
Crudelis,

C
1
2
if(remove(temp)!=0)
   perror("File is not removed");
Или просто
C
1
perror("");
Или же
C
1
 perror("Error");
Синтаксис функции:
C
1
2
#include <stdio.h>
void perror(const char *str);
Функция perror печатает сообщение об ошибке в stderr. В
этом сообщении аргумент string печатается первым, затем печатает-
ся двоеточие, системное сообщение об ошибке для последнего библи-
отечного вызова, выработавшего ошибку, и новая строка. Номер дей-
ствительной ошибки хранится в переменной errno, которая объявлена
на внешнем уровне. Системное сообщение об ошибке доступно через
переменную sys_errlist, которая является массивом сообщений для
счетчика ошибок.
Функция perror печатает приблизительное сообщение об ошиб-
ке, используя значение errno как индекс для sys_errlist. Значение
переменной sys_nerr определяется как максимальное число элементов
в массиве sys_errlist.
Чтобы выработать правильный результат, функция perror долж-
на быть вызвана сразу же после библиотечной процедуры, возвращаю-
щей ошибку. Иначе значение errno может быть перезаписано для
последующих вызовов.
1
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
31.07.2010, 15:48  [ТС] #15
функция perror("File is not removed"); возращает: Permission denied - доступ запрещен
не пойму как дать доступ на удаление файлов только для чтения
0
31.07.2010, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2010, 15:48
Привет! Вот еще темы с ответами:

Не открывается файл для чтения - C++
Не могу разобраться с кодом , не получается прописать входной фаил , не принимает его .. #include &lt;stdio.h&gt; #include &lt;math.h&gt; ...

Не может открыть файл для чтения - C++
Почему-то после закрытия не открывается файл F2? На последнем шаге программы(99 строка) срабатывает проверка: if(!F2) { cout...

Не открывается текстовый файл для чтения (использовал fstream.h) - C++
#include &lt;fstream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; void main() { ifstream...

Создание файла для записи и чтения, запись в файл данных - C++
Написать простейшую программу, которая для своей работы использует системные вызовы функций и предоставляет следующие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru