2013-01-24 6 views
3

목록 상자의 요소를 탐색기에 끌어다 놓으 려합니다. 가이 문서에서 설명하고 비트를 프로그램 코드 변경으로 나는 하나 개 존재하지 않는 파일의 복사본을 만든 : How to use filegroupdescriptor to drag file to explorer c#여러 파일이 탐색기에 존재하지 않습니다.

private void listView1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.None) 
     return; 

    byte[] array = Encoding.ASCII.GetBytes("ABCD"); 
    DataObject dataObject = new DataObject(); 
    DragFileInfo filesInfo = new DragFileInfo(@"myFile.txt", array); 
    MemoryStream infoStream = GetFileDescriptor(filesInfo); 
    MemoryStream contentStream = GetFileContents(filesInfo); 
    dataObject.SetData(CFSTR_FILEDESCRIPTORW, infoStream); 
    dataObject.SetData(CFSTR_FILECONTENTS, contentStream); 
    dataObject.SetData(CFSTR_PERFORMEDDROPEFFECT, null); 
    // drag and drop file with name "myFile.txt" and body "ABCD". 
    DoDragDrop(dataObject, DragDropEffects.All); 
} 
private MemoryStream GetFileContents(DragFileInfo fileInfo) 
{ 
    MemoryStream stream = new MemoryStream(); 
    if (fileInfo.SourceFileBody.Length == 0) fileInfo.SourceFileBody = new Byte[1]; 
    stream.Write(fileInfo.SourceFileBody, 0, fileInfo.SourceFileBody.Length); 
    return stream; 
} 

public struct DragFileInfo 
{ 
    public string FileName; 
    public byte[] SourceFileBody; 
    public DateTime WriteTime; 
    public Int64 FileSize; 

    public DragFileInfo(string fileName, byte[] sourceFileBody) 
    { 
     FileName = fileName; 
     SourceFileBody = sourceFileBody; 
     WriteTime = DateTime.Now; 
     FileSize = sourceFileBody.Length; 
    } 
} 

이 잘 작동을하지만 드래그하여 동시에 여러 파일을 드롭 할 필요가 . 어떻게해야합니까?

+0

나는 파일 이름 배열 –

답변

1

같은 문제가있었습니다. 거기서 해결을 찾았습니다 : http://www.codeproject.com/Articles/23139/Transferring-Virtual-Files-to-Windows-Explorer-in

DataObject 클래스의 메서드를 재정의해야합니다. GetData(); 예 :

public override object GetData(string format, bool autoConvert) 
    { 
     if (String.Compare(format, CFSTR_FILECONTENTS, StringComparison.OrdinalIgnoreCase) == 0) 
     { 
      base.SetData(CFSTR_FILECONTENTS, GetFileContents(FileIndex++)); 
     } 
     return base.GetData(format, autoConvert); 
    } 
관련 문제