Как проверить, может ли файл быть создан в данном каталоге на MS XP/Vista?

Почему бы просто не использовать cast()? :

select cast(t.TimeEntityElementId as date)
from dbo.Time t
where cast(t.TimeEntityElementId as date)  < '2019-01-01';

N не подходит для этого, потому что TimeEntityElementId имеет тип datetime & amp; N означает «набор символов национального языка», что означает, что вы передаете данные типа NCHAR, NVARCHAR или NTEXT.

6
задан David Locke 16 January 2009 в 16:23
поделиться

4 ответа

Я недавно записал Приложение, чтобы пройти ряд теста для получения состояния независимого поставщика программного обеспечения из Microsoft, и я также добавляю то условие. Путем я понял, что случалось так, что, если пользователь является Наименьшим количеством Priveledge затем, у него не будет разрешения записать в системных папках. Таким образом, я приблизился к проблеме способ, которым описал Ishmaeel. Я пытаюсь создать файл и поймать исключение, затем сообщают пользователю, что у него нет разрешения записать файлы в тот каталог.

В моем понимании у Наименьшего-количества-Priviledged пользователя не будет необходимых полномочий записать в те папки, если он будет иметь затем, он не Наименьшее-количество-Priveledge пользователя.

Я должен прекратить беспокоиться просто, потому что сам Windows Vista не позволит Наименьшему-количеству-привилегированному-пользователю сохранить какие-либо файлы в %WINDIR %?

По-моему? Да.

4
ответ дан 8 December 2019 в 17:28
поделиться

Я не напрасно тратил бы время и LOCs при проверке полномочия. Окончательный тест создания файла в Windows является самим созданием. Другие факторы могут сыграть роль (такие как существующие файлы (или хуже, папки) с тем же именем, дисковым пространством, фоновыми процессами. Эти условия могут даже измениться между временем, Вы осуществляете начальную проверку и время, Вы на самом деле пытаетесь создать свой файл.

Так, если бы у меня был сценарий как этот, то я просто разработал бы свой метод, чтобы не потерять любые данные в случае отказа, идти вперед и попытаться создать мой файл и предложить пользователю опцию изменить выбранный каталог и попробовать еще раз, если создание перестало работать.

4
ответ дан 8 December 2019 в 17:28
поделиться

Я соглашаюсь с другими ответами, что способ сделать это должно попытаться создать файл и поймать исключение.

Однако на Vista остерегаются контроля учётных записей! Посмотрите, например, "Почему мое приложение позволяет мне сохранить файлы к папкам Windows и System32 в Vista?": Для поддержания старых приложений Vista "симулирует" создавать файл, в то время как в действительности это создает его в так называемом Виртуальном Хранилище под профилем текущего пользователя.

Для предотвращения этого, необходимо конкретно сказать Vista, что не хотите административных привилегий включением соответствующих команд в декларации .exe, посмотрите вопрос, связанный выше.

3
ответ дан 8 December 2019 в 17:28
поделиться
import os
import tempfile

def can_create_file(folder_path):
    try:
        tempfile.TemporaryFile(dir=folder_path)
        return True
    except OSError:
        return False

def can_create_folder(folder_path):
    try:
        name = tempfile.mkdtemp(dir=folder_path)
        os.rmdir(name)
        return True
    except OSError:
        return False
3
ответ дан 8 December 2019 в 17:28
поделиться