Копирование файлов (не TXT)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Копирование файлов (не TXT)

Сообщение vi-kar » 16.05.2008 (Пт) 6:18

Скажите пожалуйста, как скопировать файл и отобразить ProgressBar его копирования. Сам файл я копирую так:
Код: Выделить всё

Dim PathSource as string = "C:\Folder"
Dim FullPathSaveFile as string = "D:\Folder"
Dim Filename as string = "Filename.pdf"
If IO.File.Exists(PathSource + "\" + Filename) Then
    IO.File.Copy(PathSource + "\" + Filename, FullPathSaveFile + "\" + Filename, True)
Else
    MsgBox(PathSource + "\" + Filename + " не существует!", MsgBoxStyle.Critical, "Файл не существует!")
End If

Но возможно кто-нибудь предложит другой вариант копирования с ПрогрессБаром?

Viper: Слово "Копирование" пишут обычно через "о". Название темы стоит писать грамотно.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 16.05.2008 (Пт) 14:39

public static void CopyFile(string sourceFileName, string destinationFileName, Microsoft.VisualBasic.FileIO.UIOption showUI)
Member of Microsoft.VisualBasic.FileIO.FileSystem

Summary:
Copies a file to a new location.

Parameters:
sourceFileName: String. The file to be copied. Required.
destinationFileName: String. The location to which the file should be copied. Required.
showUI: Microsoft.VisualBasic.FileIO.UIOption. Whether to visually track the operation's progress. Default is UIOption.OnlyErrorDialogs. Required.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 17.05.2008 (Сб) 7:10

public static void CopyFile(string sourceFileName, string destinationFileName, Microsoft.VisualBasic.FileIO.UIOption showUI)
Member of Microsoft.VisualBasic.FileIO.FileSystem

Summary:
Copies a file to a new location.

Parameters:
sourceFileName: String. The file to be copied. Required.
destinationFileName: String. The location to which the file should be copied. Required.
showUI: Microsoft.VisualBasic.FileIO.UIOption. Whether to visually track the operation's progress. Default is UIOption.OnlyErrorDialogs. Required.


Sebas, не совсем понимаю как это работает

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 17.05.2008 (Сб) 12:04

Что тут непонятного?

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 17.05.2008 (Сб) 12:33

ну просто не понятно, пожалуйста напишите где прописать это в программе! или дайте ссылку на пример. Еще хочу сделать замечание, Прогресс бар находится в строке состояния (внизу).

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 17.05.2008 (Сб) 14:23

vi-kar писал(а):Еще хочу сделать замечание, Прогресс бар находится в строке состояния (внизу).

Тогда FileSystem.CopyFile не подойдёт.

Варианты:
а) Самостоятельно читать файл-источник и писать в файл-приёмник, используя Stream.Read/Write.
б) Использовать WinAPI CopyFileEx с CallBack вызовом. Примерчик.

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 18.05.2008 (Вс) 7:23

Я хочу сейчас попробовать так: читаю один байт из файла и этот байт записываю в другой файл, затем обновляю прогресс бар и этот цикл едит заного до тех пор пока первый файл не закончится. Вот только как узнать, закончился он или нет? Цикл думаю использовать Do...Loop

Calhoon
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 07.10.2007 (Вс) 18:01
Откуда: Новосибирск

Сообщение Calhoon » 18.05.2008 (Вс) 10:24

по байту - это бред. Бери буфер больше, в неск. метров, в зависимости от свободной памяти
Самое простое решение вывести на экран 15 простых чисел:
Print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47"
____________________________
VS2008 & VS2010
VB6

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 18.05.2008 (Вс) 12:37

Да, по байту это бред - толька что проверил. Покажите пример как скопировать файл (примерно 50метров) так, чтобы фарма не висла, можно даже без прогрессбара.
Calhoon - пакажи как создать буфер!

Calhoon
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 07.10.2007 (Вс) 18:01
Откуда: Новосибирск

Сообщение Calhoon » 18.05.2008 (Вс) 17:13

Ну ты как собирался читать по байту? Ну вот читай также, но не по байту, а по неск. метров, будет быстрее

и еще глянь, отвечали мне недавно
http://bbs.vbstreets.ru/viewtopic.php?t=36394
Самое простое решение вывести на экран 15 простых чисел:
Print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47"
____________________________
VS2008 & VS2010
VB6

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 19.05.2008 (Пн) 5:28

спасибо за ссылку, кст я ее видел, но особого внимания не придал. сегодня вечерком попробую!

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 19.05.2008 (Пн) 9:01

Посмотрел я ту тему, но не понял почему там пустой буфер записывается в файл? Calhoon если ты понял как копировать через буфер, напиши примерчик пожалуйста!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 19.05.2008 (Пн) 10:41

Код: Выделить всё
     Dim Source$ = "D:\AnyFileName.avi"
    Dim Dest$ = "X:\AnyFileName.avi"
    My.Computer.FileSystem.CopyFile(Source, Dest, FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Calhoon
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 07.10.2007 (Вс) 18:01
Откуда: Новосибирск

Сообщение Calhoon » 19.05.2008 (Пн) 10:53

Nord777
ну автору же надо визуально прогрессбаром показать процесс копирования... Так что чтение/запись кусками
Самое простое решение вывести на экран 15 простых чисел:
Print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47"
____________________________
VS2008 & VS2010
VB6

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 19.05.2008 (Пн) 10:57

Calhoon
Эта функция отображает стандартное виндовое окно с прогрессбаром.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 19.05.2008 (Пн) 13:09

Calhoon - покажити как кусками копировать, а то в той теме (ссылку на которую ты дал) нет чтения из файла.
Nord777 - спасибо за пример, оставлю его прозапас, потому как прога будет в трее сидеть и такие окна желательно не выводить.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 19.05.2008 (Пн) 16:18

Скажите пожалуйста, как скопировать файл и отобразить ProgressBar его копирования.

На поставленный вопрос Gloom дал тебе ссылку с рабочим примером.
Вопрос, почему ты им не воспользовался?
Если по незнанию английского, то это пол беды. Но если ты не предринял ни каких телодвижений в сторону изучения этого примера, то это уже беда.
Это пример на который указал Gloom.
Код: Выделить всё
Public Class Form1


    Private Delegate Function CopyProgressRoutine(ByVal totalFileSize As Int64, _
                                                  ByVal totalBytesTransferred As Int64, _
                                                  ByVal streamSize As Int64, _
                                                  ByVal streamBytesTransferred As Int64, _
                                                  ByVal dwStreamNumber As Int32, _
                                                  ByVal dwCallbackReason As Int32, _
                                                  ByVal hSourceFile As Int32, _
                                                  ByVal hDestinationFile As Int32, _
                                                  ByVal lpData As Int32) As Int32

    Private Declare Auto Function CopyFileEx Lib "kernel32.dll" (ByVal lpExistingFileName As String, _
                                                                 ByVal lpNewFileName As String, _
                                                                 ByVal lpProgressRoutine As CopyProgressRoutine, _
                                                                 ByVal lpData As Int32, ByVal lpBool As Int32, _
                                                                 ByVal dwCopyFlags As Int32) As Int32

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim cpr As New CopyProgressRoutine(AddressOf CopyProgress)
        CopyFileEx("C:\Что копируешь", "C:\Куда копирушь", cpr, 0, 0, 0)
    End Sub

    Private Function CopyProgress(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
        ProgressBar1.Value = Convert.ToInt32(TotalBytesTransferred / TotalFileSize * 100)
    End Function

End Class

Советую перейти по ссылке и прочитать как это работает и какие побочные явления могут возникнуть.
Удалена за ненадобностью.

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 19.05.2008 (Пн) 18:23

Ок, завтра изучу пример. Потом скажу что получилось а что...

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 20.05.2008 (Вт) 8:23

все получилось, всем огромное СПАСИБО за помощь


Вернуться в Visual Basic .NET

Кто сейчас на конференции

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

    TopList