purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 10:37 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Файлы
СообщениеДобавлено: Вт окт 05, 2010 6:17 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Всё, что связано с файлами.

Список исходников ( будет пополнятся по мере наполнения)
Открыть, считать и т.п.
Атрибуты файлов
Удаление, перемещение
Запуск файла
Удалить файл в корзину
Тип файла
Есть ли файл на диске
Создание проекции файла в виртуальное адресное пространство процесса
Очистить корзину
Получение имени файла, по его хендлу
Вывод файла на печать
Поиск файла
Открывает свойства файла
Тип файла
Контроль изменения на HDD
Функция FindExecutable возвращает имя исполняемого (.ЕХЕ) файла, ассоциированного с указанным файлом.
Создать каталог
Быстро создавать файлы больших размеров

_________________
read-only


Последний раз редактировалось kvitaliy Ср сен 12, 2012 4:53 pm, всего редактировалось 11 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Открыть, считать и т.п.
СообщениеДобавлено: Вт окт 05, 2010 6:24 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Открыть, считать и т.п.
Этот пример демонстрирует, как можно "занять " файл, что его даже прочитать другой процесс не сможет:
Код:
1
2
3
4
5
 
_lopen_("f:\hhhhhhh.txt",#OF_SHARE_DENY_READ)
Repeat
  Delay(10)
ForEver



Все возможности и ключи ниже. Это списано у Сишников, так что делайте поправку в константах на#, а в процедурах на _:
Цитата:
; // _lopen : Откpывает указанный файл. Возвpащает: описатель файла.
; // _lcreat : Создает указанный файл. Возвpащает: описатель файла.
; // _llseek : Устанавливает указатель в откpытом файле. Возвpащает:
; // новое смещение указателя.
; // _lread : Считывает из откpытого файла указанное число байт.
; // Возвpащает: число считанных байт; 0 - если конец файла.
; // _lwrite : Записывает данные из буфеpа в указанный файл. Возвpащает:
; // число записанных байт.
; // _lclose : Закpывает указанный файл. Возвpащает: 0.
; // В случае неуспешного завеpшения все функции возвращают значение
; // HFILE_ERROR=-1.
;
; // path : Стpока, опpеделяющая путь и имя файла.
; // of : Способ открытия.
; // attrib : 0 - чтение или запись; 1 - только чтение; 2 - невидимый или
; // 3 - системный.
; // handle : Файловый описатель.
; // offset : Число байт, на котоpое пеpемещается указатель.
; // origin : Указывает начальную точку и напpавление пеpемещения: 0 -
; // впеpед от начала; 1 - с текущей позиции; 2 - назад от конца файла.
; // buffer : Пpинимающий/записываемый буфеp.
; // bytes : Число считываемых байт.
;
; // Способы открытия (параметр of):
; // int OF_READ =0; // Открыть файл только для чтения
; // int OF_WRITE =1; // Открыть файл только для записи
; // int OF_READWRITE =2; // Открыть файл в режиме запись/чтение
; // int OF_SHARE_COMPAT =3; // Открывает файл в режиме общего
; // совместного доступа. В этом режиме любой процесс может открыть данный
; // файл любое количество раз. При попытке открыть этот файл в любом другом
; // режиме, функция возвращает HFILE_ERROR.
; // int OF_SHARE_DENY_NONE =4; // Открывает файл в режиме общего доступа
; // без запрета на чтение/запись другим процессам. При попытке открытия
; // данного файла в режиме OF_SHARE_COMPAT, функция возвращает HFILE_ERROR.
; // int OF_SHARE_DENY_READ =5; // Открывает файл в режиме общего доступа с
; // запретом на чтение другим процессам. При попытке открытия данного файла
; // с флагами OF_SHARE_COMPAT и/или OF_READ или OF_READWRITE, функция
; // возвращает HFILE_ERROR.
; // int OF_SHARE_DENY_WRITE=6; // Тоже самое, только с запретом на запись.
; // int OF_SHARE_EXCLUSIVE =7; // Запрет текущему и другим процессам на
; // доступ к этому файлу в режимах чтения/записи. Файл в этом режиме можно
; // открыть только один раз (текущим процессом). Все остальные попытки
; // открытия файла будут провалены.


_________________
read-only


Последний раз редактировалось kvitaliy Вт окт 05, 2010 6:39 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Атрибуты файла
СообщениеДобавлено: Вт окт 05, 2010 6:37 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Установить Атрибуты файла
Код:
1
2
3
 
SetFileAttributes_("Text.txt",1): Только чтение
 


Остальные параметры:

Цитата:
0-параметры по умолчанию
1-только чтение
2-Скрытый
4-Системный
32-Архивный
128-Нормальный

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт окт 05, 2010 6:46 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Удалить файл после перезагрузки системы

Код:
1
MoveFileEx_("Datei.exe",0,#MOVEFILE_DELAY_UNTIL_REBOOT)



Другие флаги:

·
Цитата:
dwFlags
A set of bit flags that specify how to move the file. You can specify any combination of the following values:
MOVEFILE_COPY_ALLOWED
If the file is to be moved to a different volume, the function simulates the move by using the CopyFile and DeleteFile functions. Cannot be combined with the MOVEFILE_DELAY_UNTIL_REBOOT flag.
MOVEFILE_DELAY_UNTIL_REBOOT
Windows NT only: The function does not move the file until the operating system is restarted. The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. Consequently, this parameter enables the function to delete paging files from previous startups.
MOVEFILE_REPLACE_EXISTING
If a file of the name specified by lpNewFileName already exists, the function replaces its contents with those specified by lpExistingFileName.
MOVEFILE_WRITE_THROUGH
Windows NT only: The function does not return until the file has actually been moved on the disk.

Setting this flag guarantees that a move perfomed as a copy and delete operation is flushed to disk before the function returns. The flush occurs at the end of the copy operation.
This flag has no effect if the MOVEFILE_DELAY_UNTIL_REBOOT flag is set.


p.s. Извиняюсь за мой английский :D

_________________
read-only


Последний раз редактировалось kvitaliy Вт окт 05, 2010 6:56 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Запуск файла
СообщениеДобавлено: Вт окт 05, 2010 6:54 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Запуск файла

Код:
1
ShellExecute_(0,"edit","d:\promt.txt",#Null,#Null,#SW_SHOW)



У функции ShellExecute есть параметры ShellExecute(1, 2, 3, 4, 5, 6), где
1. Дескриптор родительского окна.
2. Действие: "explore", "open", "print". Открыть папку, открытие, печать (если указано nil, то будет выполнено действие "open").
3. Собственно, имя файла, url/email - адресс, путь к каталогу.
4. Параметры, передаваемые программе через коммандную строку.
5. Каталог по умолчанию.
6. Указывает на то, в каком состоянии будет открыто окно:
#SW_HIDE = 0;

#SW_SHOWNORMAL = 1;

#SW_NORMAL = 1;

#SW_SHOWMINIMIZED = 2;

#SW_SHOWMAXIMIZED = 3;

#SW_MAXIMIZE = 3;

#SW_SHOWNOACTIVATE = 4;

#SW_SHOW = 5;

#SW_MINIMIZE = 6;

#SW_SHOWMINNOACTIVE = 7;

#SW_SHOWNA = 8;

#SW_RESTORE = 9;

#SW_SHOWDEFAULT = 10;

#SW_MAX = 10;

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Удалить файл в корзину
СообщениеДобавлено: Вт окт 05, 2010 6:59 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Удалить файл в корзину

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#FOF_NOERRORUI=$400
 
Procedure RecycleFile(file$)
  m=AllocateMemory(Len(file$)+2)
  If m
    PokeS(m,file$) : SHFileOp.SHFILEOPSTRUCT : SHFileOp\pFrom=m : SHFileOp\wFunc=#FO_DELETE
    SHFileOp\fFlags=#FOF_ALLOWUNDO|#FOF_NOERRORUI : ok=SHFileOperation_(SHFileOp) : FreeMemory(m)
    If ok=0 : ok=1 : Else : ok=0 : EndIf
  EndIf
  ProcedureReturn ok
EndProcedure
 
RecycleFile("c:\pbidetest2.rtf")
 


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Тип файла
СообщениеДобавлено: Вт окт 05, 2010 7:26 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Тип файла

Код:
1
2
3
4
5
6
7
8
9
10
11
EnableExplicit
 
Define File$
Define info.SHFILEINFO
 
File$ = OpenFileRequester("","","Все файлы|*.*", 0)
If File$
  If SHGetFileInfo_(@File$, 0, @info.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_TYPENAME)
    MessageRequester("","Тип файла : "+PeekS(@info\szTypeName, 80),0)
  EndIf
EndIf


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Есть ли файл на диске
СообщениеДобавлено: Вт окт 05, 2010 9:12 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Есть ли файл на диске
Код:
1
2
3
4
5
6
7
8
9
Procedure FileExists (fname.s)
  Define wfd.WIN32_FIND_DATA
  Define.l hFind = FindFirstFile_(fname, @wfd)
  If (#INVALID_HANDLE_VALUE <> hFind)
    FindClose_(hFind)
      ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure



Стандартные средства PureBasic:

Код:
1
2
3
4
5
6
7
8
9
10
Result.q =FileSize("c:\ntldr")
Select Result
  Case -1
    MessageRequester("Info","Файла нет!")
  Case -2
    MessageRequester("Info","Есть такая папка!")
  Default
    MessageRequester("Info","Файл есть, размер = "+ Str(Result)+" байт" )
EndSelect
 


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт апр 26, 2011 11:08 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Создание проекции файла в виртуальное адресное пространство процесса
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
file$ = OpenFileRequester("Open file", "","All Files (*.*)|*.*", 0, #PB_Requester_MultiSelection)
   If file$
        hFile.l = CreateFile_(file$,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,GetFileAttributes_(file$),#Null)    
        If hFile = #INVALID_HANDLE_VALUE
          MessageRequester("Error", "Can not open a file", #MB_OK|#MB_ICONERROR)
          End
        Else
          lenFile.l  = GetFileSize_(hFile, #Null)
          hFileMap.l = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null) ; создаем объект отображенного в памяти (проецируемого) файла    
          MapVOF.l = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)    ; Получаем адрес базы проекции файла в памяти
          CloseHandle_(hFile)                                                   ; Освобождаем дескриптор файла
        EndIf
        If MapVOF
          ; Теперь можно работать с этой проекцией
          ; по завершении работы
          ; отменяем отображение представления файла из адресного пространства вызывающего процесса
          UnmapViewOfFile_(MapVOF)
        EndIf
    EndIf      


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Очистить корзину
СообщениеДобавлено: Вт авг 23, 2011 7:25 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Очистить корзину

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#SHERB_NOCONFIRMATION = 1
#SHERB_NOPROGRESSUI   = 2
#SHERB_NOSOUND        = 4
 
Prototype EmptyRecycleBin(hwnd = 0, pszRootPath.s = #NULL$, dwFlags = #SHERB_NOCONFIRMATION | #SHERB_NOSOUND | #SHERB_NOPROGRESSUI)
 
If OpenLibrary(0, "shell32.dll")
  CompilerIf #PB_Compiler_Unicode
    Global SHEmptyRecycleBin.EmptyRecycleBin = GetFunction(0, "SHEmptyRecycleBinW")
  CompilerElse
    Global SHEmptyRecycleBin.EmptyRecycleBin = GetFunction(0, "SHEmptyRecycleBinA")
  CompilerEndIf
EndIf
 
SHEmptyRecycleBin()


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт мар 20, 2012 2:30 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Получение имени файла, по его хендлу
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
; http://msdn.microsoft.com/en-us/library/windows/desktop/aa366789(v=vs.85).aspx
; разместил pablov
Prototype.l PROTO(hProcess.l, mem.l, pszFilename.l, MAX_PATH.l)
#BUFSIZE = 512
 
Structure STRINGVAR
   pszFilename.b[#MAX_PATH+1]
EndStructure
 
Procedure.s GetFileNameFromHandle(hFile)
 Protected pszFilename.s{#MAX_PATH+1}
 Protected hFileMap.l
 Protected strv.STRINGVAR
 Protected Filename.s = ""
 Protected GetMappedFileName.PROTO
       If OpenLibrary(0,"PSAPI.DLL")
           GetMappedFileName   = GetFunction(0, "GetMappedFileNameA")
       Else
           ProcedureReturn ""          
       EndIf
  hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
  If hFileMap
    ; Создаем проекцию файла в памяти
    pMem = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, 1);
    If pMem
       If GetMappedFileName(GetCurrentProcess_(), pMem, @pszFilename,  #MAX_PATH)
          ; Функция GetLogicalDriveStrings() перечисляет буквы всех логических и физических раздеров
          ; в формате A:\<null>C:\<null> и т.д. Т.е. буквы разделены нулем
          If GetLogicalDriveStrings_(#BUFSIZE-1, @strv\pszFilename)
               szDrive.s = PeekS(@strv\pszFilename[0], 2)
               szName.s{#MAX_PATH}
               While szDrive <> ""
                  ; Функция QueryDosDevice() по букве диска выдает порядковый
                  ;  номер устройства при подключении, в формате:
                  ; \Device\Floppy0 - для флопиков
                  ; \Device\HarddiskVolume1 - для жустких дисков
                  ; \Device\HarddiskVolume2 - для жустких дисков
                  ; \Device\CdRom0 - для CD DVD
                  ; \Device\Harddisk1\DP(1)0-0+6 - для переносных USB устройст
                  If QueryDosDevice_(szDrive, @szName, #MAX_PATH)
                      If CompareMemoryString(@szName, @pszFilename , #PB_String_NoCase, Len(szName)) = 0
                         Filename = szDrive + Mid(pszFilename, Len(szName) + 1)
                         Break
                      EndIf  
                      n + 4
                      szDrive = PeekS(@strv\pszFilename[n], 2)
                  Else
                     Break  
                  EndIf
              Wend              
          EndIf
       EndIf
    EndIf
  EndIf
  UnmapViewOfFile_(pMem)
  CloseLibrary(0)
  ProcedureReturn Filename          
EndProcedure
 
    file$ = OpenFileRequester("Open file", "","PE Files (*.exe,*.dll,*.sys,*.drv,*.scr)|*.exe;*.dll;*.sys;*.drv;*.scr|All Files (*.*)|*.*", 0)
    hFile.l = CreateFile_(file$, #GENERIC_READ, #FILE_SHARE_READ, #Null, #OPEN_EXISTING, 0, #Null)
 
    If hFile <> #INVALID_HANDLE_VALUE
        Debug GetFileNameFromHandle(hFile)
        CloseHandle_(hFile)
    EndIf
 
 


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 9:00 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Вывод файла на печать

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
File$ = OpenFileRequester("", "", "Text (*.txt)|*.txt|Все файлы (*.*)|*.*", 0)
If File$
  Select ShellExecute_(0, "print", File$, #Null, #Null, #SW_SHOWNORMAL)
    Case 0
      MessageRequester("Ошибка", "The operating system is out of memory or resources.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_FILE_NOT_FOUND
      MessageRequester("Ошибка", "The specified file was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_PATH_NOT_FOUND
      MessageRequester("Ошибка", "The specified path was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #ERROR_BAD_FORMAT
      MessageRequester("Ошибка", "The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_ACCESSDENIED
      MessageRequester("Ошибка", "The operating system denied access to the specified file.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_ASSOCINCOMPLETE
      MessageRequester("Ошибка", "The filename association is incomplete or invalid.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDEBUSY
      MessageRequester("Ошибка", "The DDE transaction could not be completed because other DDE transactions were being processed.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDEFAIL
      MessageRequester("Ошибка", "The DDE transaction failed.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DDETIMEOUT
      MessageRequester("Ошибка", "The DDE transaction could not be completed because the request timed out.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_DLLNOTFOUND
      MessageRequester("Ошибка", "The specified dynamic-link library was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_FNF
      MessageRequester("Ошибка", "The specified file was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_NOASSOC
      MessageRequester("Ошибка", "There is no application associated with the given filename extension.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_OOM  
      MessageRequester("Ошибка", "There was not enough memory to complete the operation.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_PNF
      MessageRequester("Ошибка", "The specified path was not found.", #MB_ICONSTOP|#MB_TOPMOST)
    Case #SE_ERR_SHARE
      MessageRequester("Ошибка", "A sharing violation occurred.", #MB_ICONSTOP|#MB_TOPMOST)
  EndSelect
EndIf
 



Поиск файла

Код:
1
2
3
4
5
6
7
8
9
Define Buffer$ = Space(256)
Define Result
Result = SearchTreeForFile_("C:\","Имя Файла.exe",@Buffer$); Поиск также в подкаталогах
If Result=0
  MessageRequester("","Файл с таким именем не найден.",0)
Else
  MessageRequester("","Первый найденный файл: "+Buffer$,0)
EndIf
 


Открывает свойства файла

Код:
1
2
3
4
5
6
7
8
9
10
11
12
verb$ = "properties" 
SEI.SHELLEXECUTEINFO
SEI\cbSize = SizeOf(SHELLEXECUTEINFO)
SEI\fMask = #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_INVOKEIDLIST | #SEE_MASK_FLAG_NO_UI
SEI\lpVerb = @verb$
File$ = "notepad.exe"
SEI\lpFile = @File$
ShellExecuteEx_(@SEI)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Тип файла

Код:
1
2
3
4
5
6
7
8
Define File$
Define info.SHFILEINFO
File$ = OpenFileRequester("","","Все файла|*.*", 0)
If File$
  If SHGetFileInfo_(@File$, 0, @info.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_TYPENAME)
    MessageRequester("","Тип файла: "+PeekS(@info\szTypeName, 80),0)
  EndIf
EndIf




Контроль изменения на HDD

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#FILE_NOTIFY_CHANGE_FILE_NAME = 1
#FILE_NOTIFY_CHANGE_DIR_NAME = 2
#FILE_NOTIFY_CHANGE_ATTRIBUTES = 4
#FILE_NOTIFY_CHANGE_SIZE = 8
#FILE_NOTIFY_CHANGE_LAST_WRITE = $10
#FILE_NOTIFY_CHANGE_LAST_ACCESS = $20
#FILE_NOTIFY_CHANGE_CREATION = $40
#FILE_NOTIFY_CHANGE_SECURITY = $100
#FILE_NOTIFY_CHANGE_ALL = $17F
#FILE_SHARE_DELETE = 4
#FILE_ACTION_ADDED = 1
#FILE_ACTION_REMOVED = 2
#FILE_ACTION_MODIFIED = 3
#FILE_ACTION_RENAMED_OLD_NAME = 4
#FILE_ACTION_RENAMED_NEW_NAME = 5
 
Structure FILE_NOTIFY_INFORMATION
  NextEntryOffset.l
  Action.l
  FileNameLength.l
  Filename.s{255}
EndStructure
 
Import "kernel32.lib"
  ReadDirectoryChangesW(a, b, c, d, e, f, g, h)
EndImport
 
Procedure WatchDirOrFile(z)
  Protected DirectoryName.s="C:\"
  Protected NotifyFilter.l = #FILE_NOTIFY_CHANGE_ALL
  Protected buffer.FILE_NOTIFY_INFORMATION, ovlp.OVERLAPPED
  Protected FileAction_Filename.s
  Protected hDir
  Protected bytesRead
  hDir = CreateFile_(DirectoryName, #FILE_LIST_DIRECTORY, #FILE_SHARE_READ | #FILE_SHARE_WRITE | #FILE_SHARE_DELETE, #Null, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, #Null)
  While ReadDirectoryChangesW(hDir, @buffer, SizeOf(FILE_NOTIFY_INFORMATION), #True, NotifyFilter, bytesRead, ovlp, 0)
    FileAction_Filename = PeekS(@buffer\Filename, -1, #PB_Unicode)
    Select buffer\Action
      Case #FILE_ACTION_ADDED
        AddGadgetItem(2,-1,"Added: " + DirectoryName.s + FileAction_Filename,0,0)
      Case #FILE_ACTION_REMOVED
        AddGadgetItem(2,-1,"Removed: " + DirectoryName.s + FileAction_Filename,0,0)
      Case #FILE_ACTION_MODIFIED
        AddGadgetItem(2,-1,"Modified: " + DirectoryName.s + FileAction_Filename,0,0)
      Case #FILE_ACTION_RENAMED_OLD_NAME
        ;Переименование файла: Старое имя файла
      Case #FILE_ACTION_RENAMED_NEW_NAME
        ;Переименование файла: Новое имя файла
    EndSelect
    buffer\Filename = ""
  Wend
EndProcedure
 
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(1,10,10,WindowWidth(0),20,"Изменение на диске C:\:",0)
  EditorGadget(2,10,30,WindowWidth(0)-20,WindowHeight(0)-40,0)
 
  CreateThread(@WatchDirOrFile(),0)
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
 



Функция FindExecutable возвращает имя исполняемого (.ЕХЕ) файла, ассоциированного с указанным файлом.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Define lpResult$ = Space(256)
Define FEResult
 
#ERROR_FILE_NOT_FOUND = $2
#ERROR_PATH_NOT_FOUND = $3
#ERROR_BAD_FORMAT2 = $11
 
FEResult = FindExecutable_("C:\Program Files\PureBasic\Examples\Sources\Library.pb","",@lpResult$)
Select FEResult
  Case 0
    MessageRequester("","Вызов Win Api не удался. Недостаток памяти или ресурсов.",0)
  Case 31
    MessageRequester("","Отсутствует ассоциация для данного типа файлов.",0)
  Case #ERROR_FILE_NOT_FOUND
    MessageRequester("","Указанный файл не был найден.",0)
  Case #ERROR_PATH_NOT_FOUND
    MessageRequester("","Указанный путь не был найден.",0)
  Case #ERROR_BAD_FORMAT2
    MessageRequester("","Неверный формат .ЕХЕ файла (не Win32 .EXE или поврежденный файл).",0)
  Default
    MessageRequester("","Путь: "+lpResult$,0)
EndSelect
 
 



Создать каталог

Код:
1
2
3
4
5
6
7
8
9
Define Result
 
  Result = MakeSureDirectoryPathExists_("C:\test\1\2\3\4\5\")
If Not Result  
  MessageRequester("","Каталог не создан.",0)
Else
  MessageRequester("","Каталог создан.",0)
EndIf
 



Материал предоставил pablov

_________________
read-only


Последний раз редактировалось kvitaliy Вс сен 16, 2012 7:28 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср сен 12, 2012 4:55 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Быстро создавать файлы больших размеров

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Procedure CreateSpaceFile(FileName.s, Size.q)
  Protected Result, h.l, l.l, FileID
 
  Result=#False
  h = (Size>>32)&$FFFFFFFF
  l = Size&$FFFFFFFF
 
  FileID = CreateFile(#PB_Any, FileName)
  If FileID
    hMapping=CreateFileMapping_(FileID(FileID), 0, #PAGE_READWRITE, h, l, 0)
    If hMapping
      Result=#True
      CloseHandle_(hMapping)
    EndIf
    CloseFile(FileID)
  EndIf
 
  ProcedureReturn Result
EndProcedure
 
; Создание файла, с размером 8 ГБ.
Debug CreateSpaceFile("C:\Test.bin", 8*1024*1024*1024)



Материал предоставил Пётр

_________________
read-only


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB