これはおそらく誰も私が話していることを知っていないという疑問です。ピンボケSHFileOperationルートディレクトリを変更してください
実際のWindowsの確認ダイアログを使用して、ファイルの削除、コピー、移動、および名前の変更を行いたいとします。 私はを使用しています。
そして私はに目的地を設定します。
"\ MyFolderToMove C:":私の問題は、私はこのパスでフォルダを移動したいとき、ということ、である
"C:\ユーザーはテストを\" THIS(
とをだから
SHFileOperationはに移動しようとします:
"\ C \ユーザがテストを\ D":PART)は "\ MYAPP.EXE D" と言う
からAPPLICATIONスタート重要です基本的には、アプリケーションの「スタートイン」フォルダ指定した宛先で
これを解決する方法は誰にもありますか?
誰かが見たいと思った場合のためのコードはここにあります。 (これは、VB.NETでありますが、私はまた、C#.NETを理解しています。)
Imports System.Runtime.InteropServices
Namespace SHFileOperation
Public Module SHFileOperation
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperation" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Private Structure SHFILEOPSTRUCT
Public hwnd As IntPtr
Public wFunc As Operation
<MarshalAs(UnmanagedType.LPWStr)> _
Public pFrom As String
<MarshalAs(UnmanagedType.LPWStr)> _
Public pTo As String
Public fFlags As FileOperationFlags
Public fAnyOperationsAborted As Boolean
Public hNameMappings As IntPtr
<MarshalAs(UnmanagedType.LPWStr)> _
Public lpszProgressTitle As String ' only used if FOF_SIMPLEPROGRESS
End Structure
<Flags()> Public Enum FileOperationFlags
FOF_MULTIDESTFILES = &H1
FOF_CONFIRMMOUSE = &H2
FOF_SILENT = &H4
FOF_RENAMEONCOLLISION = &H8
FOF_NOCONFIRMATION = &H10
FOF_WANTMAPPINGHANDLE = &H20
FOF_ALLOWUNDO = &H40
FOF_FILESONLY = &H80
FOF_SIMPLEPROGRESS = &H100
FOF_NOCONFIRMMKDIR = &H200
FOF_NOERRORUI = &H400
FOF_NOCOPYSECURITYATTRIBS = &H800
FOF_NORECURSION = &H1000
FOF_NO_CONNECTED_ELEMENTS = &H2000
FOF_WANTNUKEWARNING = &H4000
FOF_NORECURSEREPARSE = &H8000
End Enum
Public Enum Operation As UInteger
Move = &H1
Copy = &H2
Delete = &H3
Rename = &H4
End Enum
Public Sub MoveFiles(ByVal File As String(), ByVal DestinationDirectory As String)
Dim Struct As New SHFILEOPSTRUCT With {.hwnd = Nothing,
.wFunc = Operation.Move,
.pTo = DestinationDirectory & "\test",
.fFlags = FileOperationFlags.FOF_ALLOWUNDO Or FileOperationFlags.FOF_WANTNUKEWARNING}
Dim Files As New Text.StringBuilder()
For Each F As String In File
Files.AppendFormat("{0}" & vbNullChar, F)
Next
Struct.pFrom = Files.ToString
SHFileOperation(Struct)
End Sub
Public Sub MoveFiles(ByVal File As String, ByVal DestinationDirectory As String)
MoveFiles(New String() {File}, DestinationDirectory)
End Sub
End Module
End Namespace
DestinationDirectory引数の値が不安定になりました。それはどのように、スニペットではないことは明らかではありません。 My.Computer.FileSystem.MoveDirectoryを代わりに使用することを検討してください。 –
ご意見ありがとうございますが、私は正しい経路を送信していることを完全に確信しています。私は静的な文字列を支払うだけで、動的に設定することさえできません。一度に一つのディレクトリしか動かすことができないというその他の機能を使うために、私は後で複数のファイルやディレクトリを移動する必要があります。 –
「正しいパスを送信していることを完全に確信しています。」まあ、明らかにあなたはそうではありません。あなたがそうだったら、その機能は機能します。もう一度見てください。 –