secondsen 发表于 2007-9-26 12:46:59

复制粘贴的问题

简单说吧。。。

windows里复制粘贴文件呢   。。。。。    如果这样的话。。。。就会报错说源文件找不到

步骤复制某文件
      然后无聊的改了该文件所在文件夹的名字
      在在别的地方点粘贴

      就这样。。一定会报错。。源文件不存在。。谁都知道的事情

所以我想这样。。做个东西。。把要复制的文件存到内存中。。。然后调出来写到硬盘里。。释放内存

不知这样能做到吗?我的意思是即使改变了文件夹的名字也能粘贴出来

我不太懂哈。。大家表笑话我。。。

shawind 发表于 2007-9-26 14:14:55

当然可以做到了。但实际应用中,更多是采用磁盘来缓存的方式。
就像winrar的那个功能,你可以不用解压就直接运行压缩包里的程序。事实上它是把文件解压到一个temp目录中,然后运行的。你复制的时候也一样,可以先把文件复制放在一个临时的地方,粘贴的时候,把那个临时文件再复制过来,退出的时候清除那个临时文件就行了。如果文件不大的话,放在内存中也是可以的。

secondsen 发表于 2007-9-26 17:42:48

其实。。我就是想知道放到内存里怎么做呢?文件大约是几K到几百K那么大

请帮帮忙吧。。。

鄙人能力有限,,根本不会做。。。

先谢谢大家哈。。。麻烦大家了

rednaxela 发表于 2007-9-26 20:22:40

Windows自带的clipboard并不大,在NT系上最好是不要超过128KB,所以如果要把文件内容整个放进内存缓存的话,即使自定义一种格式并注册到clipboard上也不太好.标准clipboard一般只存放文字,图片,Office对象,文件名之类.下面假设不使用Windows自带的clipboard.

应对LZ说的情况,有好几种思路:
1. 写一个程序挂全局钩子,监听剪贴版消息,如果发现是对文件的剪贴板操作,则对其路径监视.
2. 写一个程序挂全局钩子,监听剪贴板消息,如果发现是对文件的写入剪贴板操作,并且文件大小小于一个阈值,
则实际打开文件,将文件内容和文件名保存在自定义的内存区域中;如果发现有读出剪贴板的操作,则将文件内容以原文件名写出,并在合适的时候清理先前申请的内存区域.

申请内存区域的方法,最简单的malloc或者new就OK.另外实现一个缓存也可以.
挂钩子的方法请另外查资料吧.

secondsen 发表于 2007-9-26 21:06:32

完全不懂。。。。我不想要那种监听复制剪切之类的。。。就是我输入文件路径就OK

rednaxela 发表于 2007-9-26 21:21:50

只要把文件读进内存么?
那...只要能保证程序一直在运行就...

LPBYTE fileBuf = NULL;
FILE* file = NULL;
DWORD len;

if ( ( file = fopen( path, "r") ) != NULL ) {
    /* get file length */
    fseek( file, 0, SEEK_END );
    len = ftell( file );
    fseek( file, 0, SEEK_SET );

    /* allocate memory */
    fileBuf = malloc( len * sizeof( BYTE ) );
   
    /* read file */
    fread( fileBuf, sizeof( BYTE ), len, file);

    /* ... do other stuff */
}
LZ要的莫非是这样的...么?

secondsen 发表于 2007-9-26 22:11:03

果然。。我要学习才可以。。。。 我能力太低下了。。。
页: [1]
查看完整版本: 复制粘贴的问题