S.SAKTHYBAALAN Ответов: 3

Как скопировать все содержимое (файлы и папки) с любого рабочего стола с помощью VB.NET


There are 5 PCs in my shop 3 windows 7 and 2 windows XP. Every PC is operated by different users with their account (Account names are different). A main folder called "papers" (unique) is in every PC's desktop. The folder "papers" contains subfolders and files also. I want to copy that folder(papers) to my USB stick when I clicked the application from the root of the USB.

    User 1 : C:\Users\Peter\Desktop\papers\
    User 2 : C:\Users\Ruwan\Desktop\papers\
    User 3 : C:\Users\Sam\Desktop\papers\
    User 4 : C:\Users\Roshy\Desktop\papers\
    User 5 : C:\Users\Veronica\Desktop\papers\

Here the user's name is change to different users.
In the coding, I assigned the value for FileToCopy as a single file (Java_OOPs.docx). I want to chage the FileToCopy value, to copy the entire "papers" folder to the USB.

My question is how to copy the folder (papers) and sub folder to the USB and a common name (Because the user's name is changing) for the desktop folder(access the desktop "papers" folder)

Note : This application may able to run on Windows XP too.


Что я уже пробовал:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim Gig As Long = 1073741824
    Dim FileToCopy As String = "C:\Users\Peter\Desktop\papers\Java_OOPs.docx"

    Try
        For Each drive As System.IO.DriveInfo In System.IO.DriveInfo.GetDrives
            If drive.DriveType = IO.DriveType.Removable AndAlso drive.IsReady AndAlso drive.AvailableFreeSpace >= 2 * Gig Then

                Dim DriveLetter As String = drive.Name
                Dim PathToUSBDrive = DriveLetter & IO.Path.GetFileName(FileToCopy)
                IO.File.Copy(FileToCopy, PathToUSBDrive)

            End If
        Next
    Catch ex As Exception
    End Try

End Sub

End Class

3 Ответов

Рейтинг:
26

Richard Deeming

Чтобы получить папку рабочего стола для текущего пользователя, вам нужно будет использовать Окружающая среда.GetFolderPath[^] метод.

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

Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
Dim papersPath As String = Path.Combine(desktopPath, "papers")

If Not Directory.Exists(papersPath) Then
    desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)
    papersPath = Path.Combine(desktopPath, "papers")
    If Not Directory.Exists(papersPath) Then
        MessageBox.Show("Papers folder not found.")
        Return
    End If
End If

' Get the destination path relative to the application:
Dim usbPath As String = Path.GetPathRoot(Application.ExecutablePath)
FileSystem.CopyDirectory(papersPath, usbPath)


S.SAKTHYBAALAN

Я получил ошибку Error 'CommonDesktopDirectory' не является членом ' System. Environment.SpecialFolder'.

Richard Deeming

Тогда вы используете .NET 3.5 или более раннюю версию. Этот элемент был добавлен в .NET 4.0, так что вам нужно будет либо обновить его, либо удалить If блок.

Рейтинг:
11

Ralf Meier

Возможно, вам следует попробовать использовать следующее :
файловая система.CopyDirectory : https://msdn.microsoft.com/de-de/library/ms127957.aspx

Но также вы должны взглянуть на свое назначение в PathToUSBDrive и его содержание ...

Для другой части вашего вопроса :
Это зависит от .Net-фреймворка, установленного в целевой системе, а также от фреймворка, для которого вы написали свое приложение ...


Рейтинг:
0

phil.o

Таким образом, вы хотите синхронизировать каждую папку. Что произойдет, если один и тот же файл был изменен в нескольких местах? Какую версию вы сохраните?

Кажется, это плохая идея-обрабатывать общие файлы таким образом. Рано или поздно вы, скорее всего, столкнетесь с проблемой потери данных.

Я бы:

- установите файлы в одном месте (один из компьютеров, который мы будем называть "сервер" ниже);

- создайте общий ресурс в этой папке;
Общий доступ к папке или диску-MS TechNet[^]

- создайте все учетные записи пользователей (которые используются на каждом компьютере) на сервере; учетные записи должны иметь совпадающее имя пользователя; совпадение паролей строго не требуется, но это может облегчить жизнь.
Создание учетной записи Пользователя в Windows[^]

- на удаленных компьютерах создайте ярлык на общедоступном рабочем столе, указывающий на общий ресурс на сервере.

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

Любезно.