crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Изменить атрибуты файла, readonly и прочее
ViGOur
  опции профиля:
сообщение 11.1.2008, 11:46
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как собственно можно изменить атрибуты файла в Qt?

Например у файла стоит атрибут ReadOnly, нужно его снять, как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Klabush
  опции профиля:
сообщение 11.1.2008, 17:33
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 10.10.2007
Пользователь №: 7

Спасибо сказали: 0 раз(а)




Репутация:   0  


Насчёт атрибута ReadOnly.

Явных методов типа setReadOnly и тому подобных ни у QFile, ни у QFileInfo, ни у аналогичных классов нет. Есть только некие права доступа permission, которые можно получить у QFileInfo или QFile, и установить для QFile.
Я экспериментально установил, что у простого readonly файла под виндами с NTFS пермишены равны 0x4444, а у файла не readonly - 0x6666.

В хелпе описаны следующие флаги для работы с permission:

CODE

QFile::ReadOwner 0x4000 The file is readable by the owner of the file.
QFile::WriteOwner 0x2000 The file is writable by the owner of the file.
QFile::ExeOwner 0x1000 The file is executable by the owner of the file.
QFile::ReadUser 0x0400 The file is readable by the user.
QFile::WriteUser 0x0200 The file is writable by the user.
QFile::ExeUser 0x0100 The file is executable by the user.
QFile::ReadGroup 0x0040 The file is readable by the group.
QFile::WriteGroup 0x0020 The file is writable by the group.
QFile::ExeGroup 0x0010 The file is executable by the group.
QFile::ReadOther 0x0004 The file is readable by anyone.
QFile::WriteOther 0x0002 The file is writable by anyone.
QFile::ExeOther 0x0001 The file is executable by anyone.


0x6666 - это комбинация всех Read- и Write- флагов.
Поэтому для снятия атрибута readonly можно применить следующий код:

CODE

QFile File(FileName);
File.setPermissions((((File.permissions() |= QFile::WriteOwner) |= QFile::WriteUser) |= QFile::WriteGroup) |= QFile::WriteOther);

Открывать файл перед установкой новых permissions не требуется.

Для других файловых систем эти значения используются иначе - тут надо уже смотреть по задаче.

Сообщение отредактировал Klabush - 11.1.2008, 17:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.1.2008, 17:45
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


О как, спасибо! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Klabush
  опции профиля:
сообщение 11.1.2008, 17:50
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 10.10.2007
Пользователь №: 7

Спасибо сказали: 0 раз(а)




Репутация:   0  


Можно чуть проще в части использования простых операторов вместо заумных: ;)
CODE
File.setPermissions(FileInfo.permissions() | QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther);


Но ведь мы не ищем лёгких путей, да? :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 10:50