2011-08-13 8 views
1

これはおそらく誰も私が話していることを知っていないという疑問です。ピンボケ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 
+1

DestinationDirectory引数の値が不安定になりました。それはどのように、スニペットではないことは明らかではありません。 My.Computer.FileSystem.MoveDirectoryを代わりに使用することを検討してください。 –

+0

ご意見ありがとうございますが、私は正しい経路を送信していることを完全に確信しています。私は静的な文字列を支払うだけで、動的に設定することさえできません。一度に一つのディレクトリしか動かすことができないというその他の機能を使うために、私は後で複数のファイルやディレクトリを移動する必要があります。 –

+0

「正しいパスを送信していることを完全に確信しています。」まあ、明らかにあなたはそうではありません。あなたがそうだったら、その機能は機能します。もう一度見てください。 –

答えて

2

リンク先のディレクトリには、(SHFILEOPSTRUCTのマニュアルを参照してください)ダブルNULLで終了ではありません。コードを次のように変更します。

.pTo = DestinationDirectory & "\test" & vbNullChar, 
関連する問題