PDA

Показать полную графическую версию : [решено] Как сделать "кнопку добавления файла".


Centrinar
12-05-2010, 15:24
Кнопка при нажатии на которую открывался бы проводник где надо указать файл. После чего данный файл копировался в нужную нам папку.

FlatX007
12-05-2010, 16:09
#include <File.au3>

Global $sOut = "C:\" ; Папка назначения
Global $szDrive, $szDir, $szFName, $szExt, $Path

$sFileOpenDialog = FileOpenDialog("Выберите файл", @ProgramFilesDir & "\", "Exe (*.exe)", 1 + 8 + 16)
If Not (@error) Then
$aPath = _PathSplit($sFileOpenDialog, $szDrive, $szDir, $szFName, $szExt)
If FileExists($sFileOpenDialog) And IsArray($aPath) Then FileCopy($sFileOpenDialog, $sOut & $aPath[3] & $aPath[4])
EndIf

Creat0R
12-05-2010, 16:48
FlatX007, в этом случае имя файла указывать не обязательно:

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sOut = "C:\" ; Папка назначения

$sFile = FileOpenDialog (http://www.autoitscript.com/autoit3/docs/functions/FileOpenDialog.htm)("Выберите файл", @ProgramFilesDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@programfilesdir), "Exe (*.exe)", 1 + 8 + 16)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
FileCopy (http://www.autoitscript.com/autoit3/docs/functions/FileCopy.htm)($sFile, $sOut)
ShellExecute (http://www.autoitscript.com/autoit3/docs/functions/ShellExecute.htm)($sOut)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

FlatX007
12-05-2010, 16:57
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <WinAPIEx.au3>
#include <Misc.au3>

Global $sOut = "C:\" ; Папка назначения
Global $szDrive, $szDir, $szFName, $szExt, $aPath
Global $hProgressProc = DllCallbackRegister('_ProgressProc', 'dword', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr')

$Form1 = GUICreate("", 248, 46)
$Button1 = GUICtrlCreateButton("Выбрать файл", 16, 8, 219, 25)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_FileCopy()
Switch @error
Case 0
MsgBox(64, "", "Файл скопирован")
Case 1
MsgBox(48, "", "Файл НЕ скопирован!")
EndSwitch
_Exit()
EndSwitch
WEnd

Func _FileCopy()

$sFileOpenDialog = FileOpenDialog("Выберите файл", @ProgramFilesDir & "\", "File (*.*)", 1 + 8 + 16)
If Not (@error) Then
$aPath = _PathSplit($sFileOpenDialog, $szDrive, $szDir, $szFName, $szExt)
If FileExists($sFileOpenDialog) And IsArray($aPath) Then
ProgressOn('_WinAPI_CopyFileEx', 'Copying...', '', -1, -1, 2)
_WinAPI_CopyFileEx($sFileOpenDialog, $sOut & $aPath[3] & $aPath[4], 0, DllCallbackGetPtr($hProgressProc))
If Not @error Then
Return SetError(0, 0, 0)
Else
_WinAPI_ShowLastError()
Return SetError(1, 0, 0)
EndIf
EndIf
EndIf

EndFunc ;==>_FileCopy

Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $iData)

Local $Percent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)

If $Percent = 100 Then
ProgressSet($Percent, '', 'Complete')
Else
ProgressSet($Percent)
EndIf
If _IsPressed('1B') Then
Return $PROGRESS_CANCEL
Else
Return $PROGRESS_CONTINUE
EndIf

EndFunc ;==>_ProgressProc

Func _Exit()
DllCallbackFree($hProgressProc)
ProgressOff()
EndFunc ;==>_Exit

WinAPIEx.au3 (http://autoit-script.ru/index.php?topic=47.0)

Creat0R
12-05-2010, 18:50
FlatX007, и что? зачем всё усложнять когда автор темы точно описал задачу?

FlatX007
13-05-2010, 13:16
Конечно точно описал задачу ... а если файл 4 гига, солько ждать окончания копирования ?

Creat0R
13-05-2010, 16:25
а если файл 4 гига, солько ждать окончания копирования ? »
В постановке задачи ничего не говорится о необходимости предусматривания данной ситуации.

Angelus
12-06-2010, 17:21
а если файлов несколько?......как это проще сделать?

FlatX007
12-06-2010, 18:59
; Папки не копируются, только файлы!

Global $OUT = 'C:\Out'
Global $iIncrease, $iProsent

DirCreate($OUT)

$sMultiOpenFiles = _FileOpenDialogEx("Выберите файлы для копирования", @ProgramFilesDir, "File (*.*)", 4, -1)

If Not (@error) Then
$iIncrease = 100 / $sMultiOpenFiles[0]
For $i = 1 To $sMultiOpenFiles[0]
FileCopy($sMultiOpenFiles[$i], $OUT)
$iProsent += $iIncrease
ConsoleWrite(Round($iProsent) & ' %' & @CRLF)
Next
EndIf

Func _FileOpenDialogEx($sTitle, $sInitDir, $sFilter, $iOptions = 0, $iReturnMode = -1, $sDefaultName = '', $hWnd = 0)
Local $sFOD_Ret = FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWnd)
If @error Then Return SetError(@error, @extended, $sFOD_Ret)

Local $sRet = ''
Local $aSplit_Str = StringSplit($sFOD_Ret, '|')

If @error Or $aSplit_Str[0] < 2 Then
If $iReturnMode > 0 Then Return $sFOD_Ret
Return $aSplit_Str
EndIf

Local $sInit_Path = StringRegExpReplace($aSplit_Str[1], '([^\\])\\*$', '\1')

For $i = 2 To $aSplit_Str[0]
$sRet &= $sInit_Path & '\' & $aSplit_Str[$i] & '|'
Next

$sRet = StringRegExpReplace($sRet, '\|+$', '')
If $iReturnMode > 0 Then Return $sRet

Return StringSplit($sRet, '|')
EndFunc ;==>_FileOpenDialogEx




© OSzone.net 2001-2012