Страницы

Поиск по вопросам

вторник, 18 февраля 2020 г.

Отключение наследования на папке

#c_sharp


Создаю автоматический файловую структуру. И на папке Private, нужно отключить наследование.
Но у меня не получается.

Вот мой код.

if (!Directory.Exists(path))
                        {
                            Directory.CreateDirectory(path);
                            SetFolderPermission(path, userName, FileSystemRights.ReadAndExecute);
                            SetFolderPermission(path, userName, FileSystemRights.Write);
                            RemoveFileSecurity(path, domainUsers, FileSystemRights.Write);
                            RemoveFileSecurity(path, domainUsers, FileSystemRights.Read);
                        }


И два метода

 public static void SetFolderPermission(string folderPath, string userName, FileSystemRights
rights)
        {
            var directoryInfo = new DirectoryInfo(folderPath);
            var directorySecurity = directoryInfo.GetAccessControl();

            var fileSystemRule = new FileSystemAccessRule(userName,
                                                          rights,
                                                          InheritanceFlags.ObjectInherit |
                                                          InheritanceFlags.ContainerInherit,
                                                          PropagationFlags.None,
                                                          AccessControlType.Allow);

            directorySecurity.AddAccessRule(fileSystemRule);
            directoryInfo.SetAccessControl(directorySecurity);
        }

        public static void RemoveFileSecurity(string folderPath, string userName,
FileSystemRights rights)
        {
            var directoryInfo = new DirectoryInfo(folderPath);
            var directorySecurity = directoryInfo.GetAccessControl();

            var fileSystemRule = new FileSystemAccessRule(userName,
                                                          rights,
                                                          InheritanceFlags.ContainerInherit |
                                                          InheritanceFlags.ContainerInherit ,
                                                          PropagationFlags.InheritOnly,
                                                          AccessControlType.Allow);

            directorySecurity.RemoveAccessRule(fileSystemRule);
            directoryInfo.SetAccessControl(directorySecurity);
        }


В первом методе я даю пользователю права на папку, а во втором пытаюсь отключить
наследование для пользователей домена. И это скорее всего не правильно. Мне нужно поправить
этот метод, чтобы он просто отключал бы наследование. Как мне это сделать? 
    


Ответы

Ответ 1



directorySecurity.SetAccessRuleProtection(true, false); О методе SetAccessRuleProtection

Заливка скошеных углов

#javascript #html #css


Есть 2 дива стоящих друг за другом, нужно сделать скошеную черту между ними посредине
, и сделать так что бы при наведении заливалось другим дивом до все скошеную часть
, а не за ее пределы. Как это можно сделать ?
Думаю можно сделать с js svg , но есть ли варики без них ?



.parent {
  overflow: hidden;
  width: 600px;
}
.hid {
  display: none;
  position: absolute;
  top:0;
  left:0;
  width:100%;
  height: 200px;
background: green;
}
.child {
  float: left;
  width: 50%;
  height: 200px;
  background: violet;
  position: relative;
}
.child2 {
  background: #000;
  float: left;
  width: 50%;
  height: 200px;
  position: relative;
}
.child:hover > .hid,
.child2:hover > .hid{
  display: block;
}


Ответы

Ответ 1



Вариант с clip-path *{ padding: 0; margin: 0; box-sizing: border-box; } .parent{ height: 100vh; width: 100vw; position: relative; } [class^=child-]{ height: 100%; width: 100%; position: absolute; top: 0; } .child-1{ left: 0; background: green; -webkit-clip-path: polygon(0 0, 0 100%, 100% 100%); clip-path: polygon(0 0, 0 100%, 100% 100%); } .child-2{ right: 0; background: blue; -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%); clip-path: polygon(0 0, 100% 0, 100% 100%); } [class^=child-]:hover{ opacity: .5; }


Ответ 2



но есть ли варики без них ? Да возможны. .block1{ display:table-cell; border-bottom: 100px solid red; border-left: 50px solid red; border-right: 50px solid transparent; height: 0; width: 100px; } .block2{ display:table-cell; position:relative; border-bottom: 100px solid blue; border-right: 50px solid transparent; border-left: 50px solid blue; height: 0; width: 100px; left:-50px; transform:rotate(180deg); z-index:2; }


Есть ли аналог background-size: cover для Img?

#html #css #css3


Можно ли сделать такое же выравнивание изображения img,  как это делается с помощью
background-size: cover?

Видел решения с помощью object-fit, также смотрел другие вырианты, но ни одно не
работает. Можно ли сделать без object-fit?
    


Ответы

Ответ 1



Свойство object-fit прекрасно работает. Скорее всего вы неправильно его применяли или смотрели в IE. Ниже привожу пример правильного использования свойства: #bg{ height: 100vh; width: 100%; position: relative; } #bg img{ object-fit: cover; height: 100%; width: 100%; }


Как открыть из Android приложения Яндекс.Диск Intent'ом?

#android #android_intent


Как открыть из Android приложения Яндекс.Диск Intent'ом?
    


Ответы

Ответ 1



Нужно просто создать Intent для запуска приложения на основе имени пакета. Проверка на null обязательна (вдруг приложение не установлено). Intent intent = getPackageManager().getLaunchIntentForPackage("ru.yandex.disk"); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }

Когда использую float, теряется высота родителя

#css #float


Встретился с проблемой: когда у всех дочерних элементов указал float, то у родителя
потерялась высота, т.е. ушла в 0px.

Пример:



.parent {
  width: 162px;
  border: 2px solid red;
}
.children {
  width: 50px;
  height: 50px;
  border: 2px solid blue;
  float: left;
}
Почему родитель перестал учитывать высоту дочерних элементов? Как исправить?


Ответы

Ответ 1



Родитель перестал учитывать высоту дочерних элеметов потом, что элементы с float создают новый контекст наложения и выпадают из потока элементов. Есть четыре варианта решения вашего вопроса: Если у всех дочерних элементов фиксированная высота, то и у родителя указываем фиксированную высоту: .parent { width: 162px; border: 2px solid red; /* Фиксированная высота */ height: 54px; } .children { width: 50px; height: 50px; border: 2px solid blue; float: left; }
Самый распространённый вариант ― clearfix. Создаём отдельный элемент или псевдоэлемент со стилем cler: both;: .parent { width: 162px; border: 2px solid red; } .children { width: 50px; height: 50px; border: 2px solid blue; float: left; } /* Clearfix */ .clearfix { display: table; clear: both; visibility: hidden; } .parent.b:after { content: ''; display: table; clear: both; visibility: hidden; }

С элементом:

С псевдоэлементом:

Один из самых интересных, но недейственных вариантов ― указать родителю float и тогда он тоже выпадет из общего потока и "соединится" с дочерними элементами: .parent { width: 162px; border: 2px solid red; /* Float */ float: left; } .children { width: 50px; height: 50px; border: 2px solid blue; float: left; }
И последний вариант ― указать родителю overflow. Overflow создаёт отдельный контекст форматирования для выбранного элемента, тем самым локализуя действие свойства float внутри элемента к которому применён. Подробнее... .parent { width: 162px; border: 2px solid red; /* Overflow */ overflow: auto; /* Можно устанавливать следущие значения: auto, hidden, overlay, scroll */ } .children { width: 50px; height: 50px; border: 2px solid blue; float: left; }


Как отследить изменение размера div'ов?

#javascript #html #jquery


У меня есть HTML код, в нём есть div, который имеет ширину в 100%. Он содержит несколько
элементов. При изменении размера окна внутренние элементы могут быть перегруппированы,
и размер div может измениться. 

Можно ли подключить событие изменения размера div? И как это сделать? 

В настоящее время я привязываю функцию обратного вызова к событию resize jQuery на
нужный div, однако результат не выводится, см. Ниже:





    
    


    


Ответы

Ответ 1



Существует очень эффективный метод определения того, был ли изменен размер элемента. http://marcj.github.io/css-element-queries/ Код библиотеки: /** * Copyright Marc J. Schmidt. See the LICENSE file at the top-level * directory of this distribution and at * https://github.com/marcj/css-element-queries/blob/master/LICENSE. */ ; (function(root, factory) { if (typeof define === "function" && define.amd) { define(factory); } else if (typeof exports === "object") { module.exports = factory(); } else { root.ResizeSensor = factory(); } }(this, function() { // Make sure it does not throw in a SSR (Server Side Rendering) situation if (typeof window === "undefined") { return null; } // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor. // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and // would generate too many unnecessary events. var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); }; /** * Iterate over each of the provided element(s). * * @param {HTMLElement|HTMLElement[]} elements * @param {Function} callback */ function forEachElement(elements, callback) { var elementsType = Object.prototype.toString.call(elements); var isCollectionTyped = ('[object Array]' === elementsType || ('[object NodeList]' === elementsType) || ('[object HTMLCollection]' === elementsType) || ('[object Object]' === elementsType) || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools ); var i = 0, j = elements.length; if (isCollectionTyped) { for (; i < j; i++) { callback(elements[i]); } } else { callback(elements); } } /** * Class for dimension change detection. * * @param {Element|Element[]|Elements|jQuery} element * @param {Function} callback * * @constructor */ var ResizeSensor = function(element, callback) { /** * * @constructor */ function EventQueue() { var q = []; this.add = function(ev) { q.push(ev); }; var i, j; this.call = function() { for (i = 0, j = q.length; i < j; i++) { q[i].call(); } }; this.remove = function(ev) { var newQueue = []; for (i = 0, j = q.length; i < j; i++) { if (q[i] !== ev) newQueue.push(q[i]); } q = newQueue; } this.length = function() { return q.length; } } /** * * @param {HTMLElement} element * @param {Function} resized */ function attachResizeEvent(element, resized) { if (!element) return; if (element.resizedAttached) { element.resizedAttached.add(resized); return; } element.resizedAttached = new EventQueue(); element.resizedAttached.add(resized); element.resizeSensor = document.createElement('div'); element.resizeSensor.className = 'resize-sensor'; var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;'; element.resizeSensor.style.cssText = style; element.resizeSensor.innerHTML = '
' + '
' + '
' + '
' + '
' + '
'; element.appendChild(element.resizeSensor); if (element.resizeSensor.offsetParent !== element) { element.style.position = 'relative'; } var expand = element.resizeSensor.childNodes[0]; var expandChild = expand.childNodes[0]; var shrink = element.resizeSensor.childNodes[1]; var dirty, rafId, newWidth, newHeight; var lastWidth = element.offsetWidth; var lastHeight = element.offsetHeight; var reset = function() { expandChild.style.width = '100000px'; expandChild.style.height = '100000px'; expand.scrollLeft = 100000; expand.scrollTop = 100000; shrink.scrollLeft = 100000; shrink.scrollTop = 100000; }; reset(); var onResized = function() { rafId = 0; if (!dirty) return; lastWidth = newWidth; lastHeight = newHeight; if (element.resizedAttached) { element.resizedAttached.call(); } }; var onScroll = function() { newWidth = element.offsetWidth; newHeight = element.offsetHeight; dirty = newWidth != lastWidth || newHeight != lastHeight; if (dirty && !rafId) { rafId = requestAnimationFrame(onResized); } reset(); }; var addEvent = function(el, name, cb) { if (el.attachEvent) { el.attachEvent('on' + name, cb); } else { el.addEventListener(name, cb); } }; addEvent(expand, 'scroll', onScroll); addEvent(shrink, 'scroll', onScroll); } forEachElement(element, function(elem) { attachResizeEvent(elem, callback); }); this.detach = function(ev) { ResizeSensor.detach(element, ev); }; }; ResizeSensor.detach = function(element, ev) { forEachElement(element, function(elem) { if (!elem) return if (elem.resizedAttached && typeof ev == "function") { elem.resizedAttached.remove(ev); if (elem.resizedAttached.length()) return; } if (elem.resizeSensor) { if (elem.contains(elem.resizeSensor)) { elem.removeChild(elem.resizeSensor); } delete elem.resizeSensor; delete elem.resizedAttached; } }); }; return ResizeSensor; })); Эта библиотека имеет класс ResizeSensor, который можно использовать для определения размера. Он основан на событиях, поэтому он чертовски быстро определяет и не нагружает процессор. Пример: new ResizeSensor(jQuery('#divId'), function(){ console.log('content dimension changed'); }); Пожалуйста, не используйте плагин resize для jQuery, поскольку он использует цикл setTimeout() для проверки изменений.

Ответ 2



Самое простое решение: var blockWidth = $('.block').outerWidth(); $(window).resize(function() { if (blockWidth != $('.block').outerWidth()) { console.log('resized') } }); .block { max-width:300px; height:100px; background:#000; }
Конкретно на вашем примере: var blockWidth = $('#test_div').outerWidth(); $(window).resize(function() { if (blockWidth != $('#test_div').outerWidth()) { console.log('resized') } }); .block { max-width: 300px; height: 100px; background: #000; }


Hello world с пустой функцией main

#cpp #соревнование


Столкнулся с такой задачей на собеседовании: 


  Написать программу, которая печатает в консоли фразу Hello world 


И всё бы ничего, если бы после этого стояла точка. Но фраза продолжается: 


  при условии, что функция main() данной программы выглядит следующим образом:


int main() 
{
    return 0;
}

    


Ответы

Ответ 1



Ответ очень прост. Их даже несколько. Самый простой, основанный на свойстве глобальных статических объектов. int printHelloWorld() { printf("Hello World"); return 0; } static int testVar = printHelloWorld(); int main () { return 0; } Это, если С стиль. С++ стиль: создаем класс, в конструкторе добавляем вывод, будет вывод до main, в деструкторе - после.

Ответ 2



Используем препроцессор. #define return puts("Hello World"); return int main () { return 0; } Не такой красивый вариант как со статикой, но тоже работает.

Ответ 3



True programmer напишет это в hex редакторе в машинных кодах. Даже функция main не нужна. BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 Немного исправим, воспользовавшись примером выше для соответствию заданию. using namespace std; #include class hello{ public: hello() { ofstream hello; hello.open ("hello.com"); hello << "»..№..ґ.Љ.CН.вщН Hello, World!"; hello.close(); system("hello.com"); }put; int main(){ return 0; } Вуаля мы получили программу на языке С++ которая возвращает .com файл, затем запускает его, после чего этот файл через BIOS прерывание выводит на экран Hello, world! При этом наша программа имеет пустую функцию main и не обращается напрямую к стандартном выводу в командную строку. Работает только в DOS command promt.

Ответ 4



Статические переменные и дефайны не обязательны: #include int s = printf("Hello world\n"); int main() { return 0; }

Ответ 5



Вот ещё способ: #include void hello() { puts("Hello, World!"); } #pragma data_seg(".CRT$XIY") void(*pinit)()=&hello; int main() { return 0; }; Только оказалось, что он только в дебаге работает. ПРАВКА: А ещё можно подменить точку входа: #pragma comment(linker, "/ENTRY:Main") //Вместо прагмы можно использовать параметр командной строки #include //CRT с его printf и puts (не говоря уже о cout) мы, к сожалению, потеряли, поэтому придётся использовать средства ОС int main(void) { return 0; } void Main() { WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), "Hello, World!\n", 14, nullptr, nullptr); } Кстати, у меня эта программка занимает 656 байт после того, как я немного похимичил с ключами компиляции.

Ответ 6



#include class hello { public: hello(){ std::cout << "Hello, world!\n"; } } put; int main(){ return 0; }

Ответ 7



#include const std::ostream& out = std::cout << "Hello World" << std::endl;

Ответ 8



Помимо многих предложенных ранее вариантов с выводом текста до выполнения main, предложу вариант с выводом после выполнения main: #include #include void hw() { puts("Hello world"); } int v = atexit(hw); int main() { return 0; }

Ответ 9



gcc поддерживает атрибут "constructor", который помещает функцию в init-секцию ELF-файла. Что, в свою очередь, означает, что эта функция вызовется перед функцией main. То есть, то, что нам нужно. void __attribute__((constructor)) init { printf("Hello world!"); }

Ответ 10



$ cat hellower.cpp #include "helper.cpp" int main(void) { return 0; } второй файл: $ cat helper.cpp #include int hello_helper() { printf("Hello World\n"); return 0; } static int a = hello_helper(); Лаунч: $ g++ hellower.cpp $ ./a.out Hello World

Ответ 11



Первый файл (строго соответствует условию задачи): $ cat main.cpp int main(void) { return 0; } Второй файл: $ cat hello.cpp #include int hello_helper() { printf("Hello World\n"); return 0; } static int a = hello_helper(); Makefile для компилятора g++: $ cat makefile TARGET = hello PREFIX = /usr/local/bin .PHONY: all clean install uninstall all: $(TARGET) clean: rm -f $(TARGET) *.o main.o: main.cpp g++ -c -o main.o main.cpp hello.o: hello.cpp g++ -c -o hello.o hello.cpp $(TARGET): main.o hello.o g++ -o $(TARGET) main.o hello.o install: cp $(TARGET) $(PREFIX)/$(TARGET) uninstall: rm -f $(PREFIX)/$(TARGET)

Ответ 12



Вот в стиле C++ #include class StaticOutput { static int print(); static int out; }; int StaticOutput::out = StaticOutput::print(); int StaticOutput::print() { std::cout << "Hello World!" << std::endl; return 0; } int main() { return 0; }