Проверка директории, а можно ли туда сейчас писать ?

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 28 мар 2008.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    тема очередной БОЯН[:::], но поиск по форуму что-то ничего вразумительного не дал, если кто вдруг найдет чего-нить хорошее.

    Задача:
    Дан аргумент в ф-цию название директорию и надо проверить, а можно ли сейчас внутри нее создать папку или файл.

    Пока решил тупым методом, создал папку, если создалось то удаляю эту временную папку и говорю что все ок. Но если решение более оригинальное ?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Зависит от того, почему может быть нельзя писать. Если дело только в правах, а не во всяких запрещающих прогах, то достаточно просто проверить у директории права на создание объектов/запись атрибутов для текущего пользователя.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent
    Именно сейчас, могу ли я писать в эту директорию, т.е. дело не в правах а-ля рид-онли. А в том, что не держит ли какой процесс или может еще чего?
     
  4. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    CreateFile с установленным флагом template

    после закрытия хэндла файл удалится
    если не создастся - будет возвращен -1L
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    zoool
    Приведи код плиз, который покажет твои мысли ;) (для истории)
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    zoool
    template или FILE_FLAG_DELETE_ON_CLOSE?..
     
  7. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    hFile=CreateFileA("C:\\TestDir\\somefile.tmp", FILE_ALL_ACCESS, 0, 0, CREATE_ALWAYS,
    FILE_ATTRIBUTE_TEMPORARY, 0);
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    zoool
    Спасибо не знал, но я сделал так:
    Код (Text):
    1.   var lFile: THandle;
    2.   const c_tmp_file = '\Its_must_delete';
    3.   begin
    4.     Result := DirectoryExists(ADirectory);
    5.     if Result then
    6.     begin
    7.       lFile := CreateFile(PChar(ADirectory+c_tmp_file),
    8.                           GENERIC_WRITE,  // open for writing
    9.                           0,              // do not share
    10.                           nil,
    11.                           CREATE_NEW,
    12.                           FILE_ATTRIBUTE_HIDDEN or FILE_FLAG_DELETE_ON_CLOSE or FILE_ATTRIBUTE_DIRECTORY,
    13.                           0);
    14.       Result := lFile <> INVALID_HANDLE_VALUE;
    15.       if Result then
    16.         CloseHandle(lFile);          
    17.     end;
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    А почему бы просто не открывать директорию как файл с атрибутами на запись?
    В общем мсдн лопатить по атрибутам
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt
    А какое отношение имеет процесс, открывший директорию, к созданию файлов в ней? Разве что перехватчик какой. Имхо.

    Круто, конечно, для файла такой флаг, но бессмысленно.

    asmfan
    Это немного не то.

    Собственно, лично я не знаю преград на пути к созданию файла в каталоге, кроме запрета на уровне прав, окончания места/кол-ва возможных объектов в каталоге и какого-нить перехватчика.
     
  11. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    IceStudent ну почему? просто попытаться открыть директорию с пом. CreateFile на запись - удалось, намана, закрываем хэндл. /это только идея/
    [+]
    LockFile кто-нибудь на директориях проверял?
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    asmfan
    Директорию за запись? Гм.