繁体   English   中英

FileDrop 格式的奇怪剪贴板行为

[英]Odd Clipboard behaviour with FileDrop format

我在我的应用程序中遇到了一个非常奇怪的剪贴板行为。 我有一个 Tcp 服务器,它接收一些文件,将它们保存到临时位置并将它们放入剪贴板。 这是代码的一部分:

filename = bReader.ReadString();
int dim = bReader.ReadInt32();
byte[] buffer = new byte[dim];
buffer = bReader.ReadBytes(dim);
using (FileStream fs = new FileStream(type, FileMode.OpenOrCreate, FileAccess.Write))
{
    fs.Write(buffer, 0, buffer.Length);
    fs.Close();
}                    
String path = Path.GetFullPath(filename);
DataObject data = new DataObject();
data.SetData(DataFormats.FileDrop, true, new String[]{path});
Clipboard.SetDataObject(data, true);

我可以正确接收和保存文件,并将 FileDrop 数据放入剪贴板。 问题是我只能在我的应用程序关闭时粘贴文件。 这真的很奇怪...

应用程序关闭后,我可以毫无问题地粘贴,并且粘贴的文件完全正确。

有什么建议么? 提前致谢

可能发生,当您调用Clipboard.SetDataObject时,剪贴板是共享系统资源,它调用user32 API 函数OpenClipboard ,这里的问题可能是因为您的程序打开了它,因此其他应用程序在您的应用程序仍在运行时无法使用它。 如果您在其上使用自定义元文件,这也可能是一个问题,请检查 无论如何,我运行此代码“如果重要,我将使用 4.0”:

DataObject data = new DataObject();
data.SetData(DataFormats.FileDrop, true, new String[] { @"C:\test.txt" });
Clipboard.SetDataObject(data, true);

但是我没有查看您描述的问题,Windows可以在程序运行时和关闭后看到复制操作。 您是否只能从该代码访问Clipboard 您如何读取数据“粘贴在您的表单中”?

使用 data.SetData(DataFormats.FileDrop, true, new String[] { @"C:\\test.txt" }); 不会正确设置剪贴板 DataObject。 小费! 如果您询问剪贴板,则必须重置它。 来自https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.clipboard.setfiledroplist?view=netframework-4.0

DataObject dataObj = new DataObject();
//Create and initializes a new StringCollection.
StringCollection strcolFileList = new StringCollection();
strcolFileList.AddRange(fileList);

try
{
dataObj.SetFileDropList(strcolFileList);
}
catch { }
dataObj.SetData(DataFormats.UnicodeText, Path.GetFullPath(strcolFileList[0]); ); //you can add this for fun
Clipboard.SetDataObject(dataObj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM