Большая вещь, которая изменилась между Windows XP и Windows Vista / 7, - это введение UAC, что означает, что пользователи, даже если они созданы как администраторы, обычно не имеют доступа для чтения и записи к «важным» местоположениям, таким как %programfiles%
(обычно C:\Program Files
или C:\Program Files (x86)
). Вот почему ваше приложение работает в Windows XP, а не в Windows Vista.
Вам необходимо сохранить данные DATA в каталоге %programdata%
(обычно C:\ProgramData
), если данные распределяются между пользователями по машина или %appdata%
(обычно C:\Users\USERNAME_GOES_HERE\AppData\Roaming
), если она специфична для данного пользователя. Теперь вы больше не сталкиваетесь с проблемой неспособности записать файл.
Причиной этого является то, что путем хранения данных в каталоге установки программ вы делали неправильную вещь . Windows не помешала вам сделать это раньше, но было довольно широко документировано, что %programfiles%
не было подходящим местом для хранения данных.
Чтобы соответствовать вашему селектору, элемент должен иметь имя класса red
и должен быть первым дочерним элементом своего родителя.
<div>
<span class="red"> <!-- MATCH -->
</div>
<div>
<span>Blah</span>
<p class="red"> <!-- NO MATCH -->
</div>
<div>
<span>Blah</span>
<div><p class="red"></div> <!-- MATCH -->
</div>
Поскольку другие ответы касаются того, что не так , я попробую другую половину, как это исправить. К сожалению, я не знаю, есть ли у вас здесь только CSS решение, по крайней мере не то, что я могу вспомнить . Однако есть и другие варианты ....
Назначьте класс first
элементу при его создании, например:
CSS:
.first.red {
граница: 5 пикселей сплошной красный; {{1} }}
Этот CSS сопоставляет только элементы с как first
, так и red
классами.
Или сделайте то же самое в JavaScript, например, вот какой jQuery вы бы использовали для этого, используя тот же CSS, что и выше:
$ (". Red: first"). AddClass ("first");
Селектор : first-child
предназначен, как следует из названия, для выбора первого дочернего элемента родительского тега. Дочерние элементы должны быть встроены в один и тот же родительский тег. Ваш точный пример будет работать (только что попробовал здесь ):
<body>
<p class="red">first</p>
<div class="red">second</div>
</body>
Может быть, вы вложили свои теги в разные родительские теги? Действительно ли ваши теги класса red
являются первыми тегами родительского элемента?
Обратите внимание, что это относится не только к первому такому тегу во всем документе, но каждый раз, когда новый родительский элемент оборачивается вокруг него, например:
<div>
<p class="red">first</p>
<div class="red">second</div>
</div>
<div>
<p class="red">third</p>
<div class="red">fourth</div>
</div>
первый
и третий
тогда будут красными.
Обновление:
Я не знаю, почему Мартин удалил свой ответ, но у него было решение, селектор : nth-of-type
:
<html>
<head>
<style type="text/css">
.red:nth-of-type(1)
{
border:5px solid red;
}
</style>
</head>
<body>
<div class="home">
<span>blah</span>
<p class="red">first</p>
<p class="red">second</p>
<p class="red">third</p>
<p class="red">fourth</p>
</div>
</body>
</html>
Кредиты Мартину . Дополнительная информация, например здесь .Имейте в виду, что это селектор CSS 3, поэтому не все браузеры его распознают (например, IE8 или старше).