Russian Qt Forum
Ноябрь 27, 2024, 10:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Баг или фича?  (Прочитано 4149 раз)
Vitto74
Гость
« : Сентябрь 17, 2010, 14:36 »

Почему функция QFile::exists("/etc/.") возвращает true, хотя файла такого нет - это папка.
При этом QFile::exists("/etc") возвращает false.
Записан
Samuill
Гость
« Ответ #1 : Сентябрь 17, 2010, 17:57 »

Ну, если вы в UNIX'е пробовали этот код, то всё в порядке, потому как в нём всё есть файл по большому счёту
Записан
Vitto74
Гость
« Ответ #2 : Сентябрь 17, 2010, 18:55 »

Хреновато. Попытка открыть для записи заканчивается ошибкой.
Записан
Grem
Гость
« Ответ #3 : Сентябрь 17, 2010, 19:35 »

Почему функция QFile::exists("/etc/.") возвращает true, хотя файла такого нет - это папка.
При этом QFile::exists("/etc") возвращает false.
Ошибаетесь, /etc/. есть, вот смотрите -
Код
Bash
grem@laptop:~$ cd /etc
grem@laptop:/etc$ ls -a
. gre.d     pam.d
.. groff     pango
acpi group     papersize
adduser.conf group-     passwd
adjtime grub.d     passwd-
alternatives gshadow     pcmcia
anacrontab gshadow-     perl
apm gtk-2.0     pm
apparmor hal     pnm2ppa.conf
apparmor.d hdparm.conf     polkit-1
apport host.conf     popularity-contest.conf
apt hostname     ppp
at.deny hosts     profile
ati hosts.allow     profile.d
avahi hosts.deny     protocols
avrdude.conf hp     pulse
bash.bashrc ifplugd     .pwd.lock
bash_completion init     python
bash_completion.d init.d     python2.6
bindresvport.blacklist initramfs-tools      qt3
blkid.conf inputrc     rarfiles.lst
blkid.tab insserv     rc0.d
bluetooth insserv.conf     rc1.d
bogofilter.cf insserv.conf.d     rc2.d
bonobo-activation iproute2     rc3.d
brlapi.key issue     rc4.d
brltty issue.net     rc5.d
byobu java     rc6.d
ca-certificates .java     rc.local
ca-certificates.conf java-6-openjdk     rcS.d
calendar jetty     resolvconf
chatscripts kbd     resolv.conf
checkbox.d kernel     rmt
chromium-browser kernel-img.conf      rpc
compizconfig kerneloops.conf      rsyslog.conf
computer-janitor.d ldap     rsyslog.d
conky ld.so.cache     samba
ConsoleKit ld.so.conf     sane.d
console-setup ld.so.conf.d     screenrc
couchdb legal     securetty
cron.d lftp.conf     security
cron.daily libpaper.d     sensors3.conf
cron.hourly locale.alias     sensors.d
cron.monthly localtime     services
crontab logcheck     sgml
cron.weekly login.defs     shadow
crypttab logrotate.conf     shadow-
cups logrotate.d     shells
cvs-cron.conf lsb-base     skel
cvs-pserver.conf lsb-base-logging.sh  sound
dbus-1 lsb-release     speech-dispatcher
debconf.conf ltrace.conf     ssh
debian_version magic     ssl
default magic.mime     subversion
defoma mailcap     sudoers
deluser.conf mailcap.order     sudoers.d
depmod.d manpath.config     sysctl.conf
dhcp3 mime.types     sysctl.d
dictionaries-common mke2fs.conf     terminfo
dkms modprobe.d     timezone
doc-base modules     ts.conf
dpkg mono     ucf.conf
emacs motd     udev
environment mtab     ufw
esound mtab.fuselock     updatedb.conf
firefox mtools.conf     update-manager
firefox-3.0 mysql     update-motd.d
fonts nanorc     update-notifier
foomatic netbeans.clusters    vim
fstab netbeans.conf     w3m
fuse.conf netbeans.import      wgetrc
gai.conf netscsid.conf     wodim.conf
gamin network     wpa_supplicant
gconf NetworkManager     X11
gdb networks     xdg
gdm nsswitch.conf     xml
gnome obex-data-server     xul-ext
gnome-app-install openal     xulrunner-1.9.2
gnome-system-tools openoffice     zsh_command_not_found
gnome-vfs-2.0 opt
gnome-vfs-mime-magic pam.conf
Записан
TukiNov
Гость
« Ответ #4 : Сентябрь 17, 2010, 21:05 »

Хреновато. Попытка открыть для записи заканчивается ошибкой.
Права доступа. простые смертные не могут в /etc писать
Записан
maxim
Гость
« Ответ #5 : Сентябрь 17, 2010, 21:44 »

Скорее файл такой есть. В Unix не каталогов, зато есть файлы с разными флагами. Поэтому он и возратил true.
Записан
Vitto74
Гость
« Ответ #6 : Сентябрь 17, 2010, 23:06 »

Собственно . и .. это, сточки зрения программы, не файлы, а папки. Если я открываю /home/<user>/.  то происходит также ошибка т.к. как бы мне ни хотелось открыть папку как файл это сделать не получится.

Код:
vitto@vitto-desktop:~$ cat /.
cat: /.: Это каталог
vitto@vitto-desktop:~$
Записан
alexcpp
Гость
« Ответ #7 : Сентябрь 17, 2010, 23:24 »

идеология ФС линуксподобных систем - все есть фаил. в вашем случае все правильно.
не понятно, чего вы ожидаете...
Записан
Vitto74
Гость
« Ответ #8 : Сентябрь 18, 2010, 04:21 »

Это скорее не идеология, а особенности файловой системы Unix - она очень гибкая. Но тем не менее другие программы определяют этот путь как папку, а Qt утверждает, что это файл, но открывать его как файл отказывается.
Пока при переборе файлов, приходится пользоваться костылями
Код:
if (str.right(2) == QDir::separator+".")
    continue;
if (str.right(3) == QDir::separator+"..")
    continue;
Записан
nixman05
Гость
« Ответ #9 : Сентябрь 18, 2010, 10:21 »

Это скорее не идеология, а особенности файловой системы Unix - она очень гибкая. Но тем не менее другие программы определяют этот путь как папку, а Qt утверждает, что это файл, но открывать его как файл отказывается.
Пока при переборе файлов, приходится пользоваться костылями
Код:
if (str.right(2) == QDir::separator+".")
    continue;
if (str.right(3) == QDir::separator+"..")
    continue;

Используй
Код
C++ (Qt)
QDir::NoDotAndDotDot
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 21.