社区
C#
帖子详情
如何获取粘贴文件后的路径
lwghost
2009-03-23 09:22:50
如果源文件在C:\目录下,现在把它剪贴到D:\test\目录下,那在C#.NET里如何获取到D:\test\目录下的文件路径!
注:剪贴操作并不是在程序中去完成,而就是通过window系统的剪贴操作完成的!!
...全文
617
28
打赏
收藏
如何获取粘贴文件后的路径
如果源文件在C:\目录下,现在把它剪贴到D:\test\目录下,那在C#.NET里如何获取到D:\test\目录下的文件路径! 注:剪贴操作并不是在程序中去完成,而就是通过window系统的剪贴操作完成的!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
硪鑀扯蛋
2012-08-09
打赏
举报
回复
[Quote=引用 27 楼 的回复:]
没有人能解答下吗?
[/Quote]
这个一般人基本回答不上来~~~高手不会公开技术~~~╮(╯▽╰)╭我自己也在找~~~希望那个牛人可以很好很好的解决一下~~~
lwghost
2009-03-26
打赏
举报
回复
没有人能解答下吗?
lwghost
2009-03-24
打赏
举报
回复
[Quote=引用 22 楼 lovefootball 的回复:]
我觉得得拦截MoveFileEx什么的
可能会用到API拦截
你可以看下MS的Detour开发包
http://research.microsoft.com/en-us/projects/detours/
[/Quote]
能详细说明下"拦截MoveFileEx"吗?
lwghost
2009-03-24
打赏
举报
回复
[Quote=引用 24 楼 birdlonger 的回复:]
使用FileSystemWatcher , 写其Create 事件到是能监控到创建文件的路径(不过不能限制在粘贴创建的文件新建文件什么的都能响应这个事件). 如果你的使用环境下能确定只粘贴创建文件.到可以用它来监控的到粘贴后的路径.
不过也可以尝试根据它得到的路径跟GetFileDropList只用得到文件的源路径地址两个文件来进行简单的文件比较.如大小比较或者其他简单属性.如果一样就可以认为新得到的文件是从你比较的那个路径粘贴来的.这样就可以…
[/Quote]
你说的这个方法可能会在部分程度上满足我的要求,但这种方法太过于极端,不适合后期的功能扩展!谢谢了,还有没有更好的想法?
birdlonger
2009-03-24
打赏
举报
回复
使用FileSystemWatcher , 写其Create 事件到是能监控到创建文件的路径(不过不能限制在粘贴创建的文件新建文件什么的都能响应这个事件). 如果你的使用环境下能确定只粘贴创建文件.到可以用它来监控的到粘贴后的路径.
不过也可以尝试根据它得到的路径跟GetFileDropList只用得到文件的源路径地址两个文件来进行简单的文件比较.如大小比较或者其他简单属性.如果一样就可以认为新得到的文件是从你比较的那个路径粘贴来的.这样就可以得到 新 ,旧俩路径.
liusichen_0
2009-03-23
打赏
举报
回复
楼主的问题可以试一下
ClipboardProxy.ContainsFileDropList
具体用法参考MSDN,不知道里面会不会保存粘贴的路径
lwghost
2009-03-23
打赏
举报
回复
我不要需要获取应用程序的目录,再说你这样有对剪切操作进行监控吗?如何在剪切的时候再去得到移动文件后的路径,请看清题了再回答!
zzxap
2009-03-23
打赏
举报
回复
难道要说到骨子里头才会?
zzxap
2009-03-23
打赏
举报
回复
获取应用程序的当前工作目录。
string str = System.IO.Directory.GetCurrentDirectory();
Result: C:\xxx\xxx
这个不是已经说的很清楚了吗
lwghost
2009-03-23
打赏
举报
回复
有没有人帮忙解决下啊,等着急用!!
liusichen_0
2009-03-23
打赏
举报
回复
[Quote=引用 8 楼 zzxap 的回复:]
C# code
1.获取和设置当前目录的完全限定路径。
string str = System.Environment.CurrentDirectory;
Result: C:\xxx\xxx
2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System.Windows.Forms.Application.StartupPath;
Result: C:\xxx\xxx
3.获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名。
string str = System.Diagnostics.Process…
[/Quote]
这个不错,收藏一下
lwghost
2009-03-23
打赏
举报
回复
谢谢"风语者"的回复,但清楚几点:
1.并不是要获取剪贴板里面的数据;只需要得到剪贴板里的文件最后粘贴到哪个目录下了?
2.在获取路径方面我知道怎样去获取,但现在的前提是如何去获取粘贴文件后的路径,你所提供的获取路径都是已知了文件,再去获取路径的情况,与我所需的答案还是有出入的.
请各位大侠再看清一下题,是怎样去获取粘贴文件的目录路径?前提并不知道会被粘贴到哪个目录下!!
zzxap
2009-03-23
打赏
举报
回复
对于Windows程序 和Web 应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序.于是我们可以使用如下的代码
string path = "";
if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)//Windows应用程序则相等
{
path = AppDomain.CurrentDomain.BaseDirectory;
}
else
{
path = AppDomain.CurrentDomain.BaseDirectory + "Bin\";
}
这样如果我们写了一个类库,类库中用到了Assembly.LoadFrom,由于是通用类库,所以可能用到Windows程序中也可能用到Web中,那么用上面的代码就很方便了.
做法2:
string MyPath = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
C#获取项目程序及运行路径的方法
1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”;
2.c# winform用
A:“Application.StartupPath”:获取当前应用程序所在目录的路径,最后不包含“\”;
B:“Application.ExecutablePath ”:获取当前应用程序文件的路径,包含文件的名称;
C:“AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;
D:“System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;
E:“Environment.CurrentDirectory”:获取当前应用程序的路径,最后不包含“\”;
F:“System.IO.Directory.GetCurrentDirectory”:获取当前应用程序的路径,最后不包含“\”;
3.c# windows service服务中用“AppDomain.CurrentDomain.BaseDirectory”或“System.Threading.Thread.GetDomain().BaseDirectory”;
用“Environment.CurrentDirectory”和“System.IO.Directory.GetCurrentDirectory”将得到“ system32”目录的路径;
如果要使用“Application.StartupPath”或“Application.ExecutablePath ”,需要手动添加对“System.Windows.Forms.dll ”的引用,并在程序开头用“using System.Windows.Forms”声明该引用;
4.在卸载程序获取系统安装的目录:
System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();
string path=curPath.Location;//得到安装程序类SetupLibrary文件的路径,获取这个文件路径所在的目录即得到安装程序的目录;
zzxap
2009-03-23
打赏
举报
回复
[code=C#]
1.获取和设置当前目录的完全限定路径。
string str = System.Environment.CurrentDirectory;
Result: C:\xxx\xxx
2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System.Windows.Forms.Application.StartupPath;
Result: C:\xxx\xxx
3.获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Result: C:\xxx\xxx\xxx.exe
4.获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
Result: C:\xxx\xxx\
5.获取应用程序的当前工作目录。
string str = System.IO.Directory.GetCurrentDirectory();
Result: C:\xxx\xxx
6.获取和设置包含该应用程序的目录的名称。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
Result: C:\xxx\xxx\
7.获取当前进程的完整路径,包含文件名。
string str = this.GetType().Assembly.Location;
Result: C:\xxx\xxx\xxx.exe
8.获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
Result: C:\xxx\xxx\xxx.exe
[/CODE]
lwghost
2009-03-23
打赏
举报
回复
前面的D:\test\目录是我说的一个例子,并不是真正的路径,我这里是想得到的是CTRL+V粘贴文件后的目录路径,并不是文件的源路径,还有复制粘贴的目标都是文件,并不是字符串!
zzxap
2009-03-23
打赏
举报
回复
[code=C#]
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
public class Form1 : Form
{
private Button button1 ;
private Button button2 ;
private TextBox textBox1 ;
private TextBox textBox2 ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
InitializeComponent ( ) ;
}
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
this.button1 = new Button ( ) ;
this.button2 = new Button ( ) ;
this.textBox1 = new TextBox () ;
this.textBox2 = new TextBox ( ) ;
this.SuspendLayout ( ) ;
this.button1.Location = new System.Drawing.Point ( 264 , 56 ) ;
this.button1.Size = new System.Drawing.Size ( 96 , 40 ) ;
this.button1.Name = "button1" ;
this.button1.TabIndex = 0 ;
this.button1.Text = "拷贝指定的数据到剪切板" ;
this.button1.Click += new System.EventHandler ( this.button1_Click ) ;
this.button2.Location = new System.Drawing.Point ( 264 , 104 ) ;
this.button2.Size = new System.Drawing.Size ( 96 , 40 ) ;
this.button2.Name = "button2" ;
this.button2.TabIndex = 1 ;
this.button2.Text = "从当前剪切板获得数据" ;
this.button2.Click += new System.EventHandler ( this.button2_Click ) ;
this.textBox1.Location = new System.Drawing.Point ( 64 , 64 ) ;
this.textBox1.Name = "textBox1" ;
this.textBox1.TabIndex = 2 ;
this.textBox1.Text = "" ;
this.textBox2.Location = new System.Drawing.Point ( 64 , 104 ) ;
this.textBox2.Name = "textBox2" ;
this.textBox2.TabIndex = 3 ;
this.textBox2.Text = "" ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
this.ClientSize = new System.Drawing.Size ( 384 , 273 ) ;
this.Controls.Add ( textBox2 ) ;
this.Controls.Add ( textBox1 ) ;
this.Controls.Add ( button2 ) ;
this.Controls.Add ( button1 ) ;
this.Name = "Form1" ;
this.Text = "Visual C#来操作Clipboard!" ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
if ( textBox1.SelectedText != "" )
Clipboard.SetDataObject ( textBox1.SelectedText ) ;
else
textBox2.Text = "在textBox1中没有选定的内容";
}
private void button2_Click ( object sender , System.EventArgs e )
{
IDataObject iData = Clipboard.GetDataObject ( ) ;
//检测数据是否是可以使用的格式,即文本格式
if ( iData.GetDataPresent ( DataFormats.Text ) )
{
//是可以使用的格式,就在textbox2中显示剪切板中的内容
textBox2.Text = ( String ) iData.GetData ( DataFormats.Text ) ;
}
else
{
//如果不是
textBox2.Text = "没有从剪切板中接收到数据!" ;
}
}
}
[/CODE]
zzxap
2009-03-23
打赏
举报
回复
if ( textBox1.SelectedText != "" )
Clipboard.SetDataObject ( textBox1.SelectedText ) ;
else
textBox2.Text = "在textBox1中没有选定的内容" ;
(2).把读取剪切板中的数据,并显示出来。
要实现本步骤,也需要解决好二个问题:其一,在剪切板中不仅可以存放文本,还可以存放其他类型的数据,而TextBox2能够显示出来的数据类型只有文本,所以为了程序有更好的稳定性,在显示之前,要判断当前剪切板中的数据类型是文本,其二,读取剪切板中的数据,并显示出来。
I > .判断当前剪切板中的数据类型:
判断剪切板中的数据类型,要使用到IdataObject接口,此接口的可以存放从剪切板中读取得数据。通过IdataObject接口的方法GetDataPresent()来判断是否为符合自己需要的数据类型。
II >.读取剪切板中的数据,并显示出来:
通过Clipboard类的GetDataObject()可以把当前剪切板中的数据存放到IdataObject接口中,但IdataObject接口这地数据不能直接被程序使用,必须通过IdataObject接口的GetData()获得数据。但由于GetData()地返回值是一个Object类型变量,即参考类型变量,而TextBox1显示的文本是实值类型变量,所以还要进行一次出箱的操作,这种操作在前面的文章已经比较详细的介绍过了,这里就不加叙述了。经过出箱操作后的数据就可以被TextBox1使用了。下面是解决上面二个问题的代码:
IDataObject iData = Clipboard.GetDataObject ( ) ;
//检测数据是否是可以使用的格式,即文本格式
if ( iData.GetDataPresent ( DataFormats.Text ) )
{
//是可以使用的格式,就在textbox2中显示剪切板中的内容
textBox2.Text = ( String ) iData.GetData ( DataFormats.Text ) ;
}
else
{
//如果不是
textBox2.Text = "没有从剪切板中接收到数据!" ;
}
dyshadow
2009-03-23
打赏
举报
回复
[Quote=引用 1 楼 Guyschaos 的回复:]
引用楼主 lwghost 的帖子:
那在C#.NET里如何获取到D:\test\目录下的文件路径!
你不都知道路径了嘛!那还获取什么?这句话我还真不太理解!
你直接掉move命令好了!
[/Quote]
LZ似乎是要做个剪贴板中的信息,得到CTRL+C之后文件的路径,再进行操作。
剪贴板中的信息是有类型的,string类型是无法接受bitmap类型数据。
具体没有实现过,不过感觉上是应该找个文件系统移动的类型进行操作。
justindreams
2009-03-23
打赏
举报
回复
ClipBoard
wuyi8808
2009-03-23
打赏
举报
回复
监视系统剪贴板。
加载更多回复(7)
C++
获取
剪贴板
文件
路径
C++与资源管理器交互,
获取
剪贴板复制的
文件
路径
#include <oleidl.h> #include <comdef.h> #include <vector> #include <string> std::vector<std::string> GetPaths() { std::vector<std::strin...
C++中如何
获取
一个
文件
夹下带有指定
文件
后缀名的
文件
绝对
路径
在更新单点定位程序之前,先说一下C++中如何
获取
一个
文件
夹下带有指定
文件
后缀名的
文件
绝对
路径
。由于在调试单点定位程序的时候,我总是不停地输入观测值
文件
(.o)和卫星星历
文件
(.n)。因此就要不断地的复制
粘贴
复制
粘贴
,把自己弄成了一个复读机。哎,昨天才想起来要是能够直接输入
文件
夹的名称,岂不是更加省事,起码不用来回的复制观测值
文件
的
路径
和星历
文件
的
路径
。下面就来说一下如何
获取
一个
文件
夹下带有指定
文件
...
python 中
文件
路径
到底怎么写 +
获取
mac
文件
路径
快捷键!!
python 中
文件
路径
到底怎么写 +
获取
mac
文件
路径
快捷键!!
linux中怎么
粘贴
复制
文件
路径
,如何在Linux中复制
文件
和目录
复制
文件
和目录是在命令行上执行时最常见的任务之一。在Linux中,有几个命令用于复制
文件
cp比rsync 更受欢迎。使用 cp复制
文件
,rsync命令用于复制目录,是该命令一种常见的做法。为了能够复制
文件
和目录,您必须至少具有对源
文件
的读取权限和对目标目录的写入权限。使用cp命令复制
文件
在Linux和Unix操作系统上,cp命令用于复制
文件
和目录。最简单的用例是复制当前工作目录中的
文件
。例如,要复...
mac上
获取
当前
文件
路径
实际工作中经常需要
获取
当前
文件
的
路径
。在mac中常用的方法有如下几种 方式一 如果只是需要看一下这个
文件
的
路径
,可以先选中该
文件
,然后右键,选择显示简介,然后就会显示这个
文件
的具体
路径
。快捷键为command+i 方式二 上面的方式只能查看
路径
,但是实际工作中经常需要对
路径
进行复制
粘贴
。那么可以打开terminal,把
文件
拖到terminal中,在terminal中就会显示
文件
对应的
路径
,然后进行...
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章