none
判断是否为当前目录 RRS feed

  • 问题

  • 我现在要添加一个图片到当前目录下,就像QQ里面添加表情一样,如果选择的图片就在当前目录,则不用拷贝,如果不在当前目录,则将文件拷贝到当前目录。但是如果当前目录下有与之重名的文件,则重命名(自动重命名)。请问,该怎么实现呢?
                OpenFileDialog fileChooser = new OpenFileDialog();
                fileChooser.RestoreDirectory = true;    //用来指示对话框在关闭前是否还原当前目录
                fileChooser.Filter = "JPEG(*.GPEG;*.GPG;*.JPE)|*.JPG";
                DialogResult result = fileChooser.ShowDialog();
    我不知道下面怎么写了,请高手指点。
    勿以恶小而为之,勿以善小而不为
    2009年6月22日 0:22

答案

  • 你好!
         其他的都比较好办,主要是你的第一条要求,就算文件名不同,也很有可能是同样的图片,这涉及到比较两个图片是否一致的问题,你这样比较:
            private bool Same(Image image1, Image image2)
            {
                MemoryStream ms1 = new MemoryStream();
                MemoryStream ms2 = new MemoryStream();
    
                image1.Save(ms1, System.Drawing.Imaging.ImageFormat.Bmp);
                image2.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp);
                byte[] im1 = ms1.GetBuffer();
                byte[] im2 = ms2.GetBuffer();
                if (im1.Length != im2.Length)
                    return false;
                else
                {
                    for (int i = 0; i < im1.Length; i++)
                        if (im1[i] != im2[i])
                            return false;
                }
                return true;
            }
    


    周雪峰
    2009年6月22日 2:39
    版主
  • file 有  exists 方法


    而且  QQ的表情文件名一般都是文件内容的hash  所以不大可能出现文件名不同  内容一样的状况


    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年6月22日 8:14
    版主

全部回复

  • 你好!
         其他的都比较好办,主要是你的第一条要求,就算文件名不同,也很有可能是同样的图片,这涉及到比较两个图片是否一致的问题,你这样比较:
            private bool Same(Image image1, Image image2)
            {
                MemoryStream ms1 = new MemoryStream();
                MemoryStream ms2 = new MemoryStream();
    
                image1.Save(ms1, System.Drawing.Imaging.ImageFormat.Bmp);
                image2.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp);
                byte[] im1 = ms1.GetBuffer();
                byte[] im2 = ms2.GetBuffer();
                if (im1.Length != im2.Length)
                    return false;
                else
                {
                    for (int i = 0; i < im1.Length; i++)
                        if (im1[i] != im2[i])
                            return false;
                }
                return true;
            }
    


    周雪峰
    2009年6月22日 2:39
    版主
  • 其他都好办的请版主也给出答案吧。
    勿以恶小而为之,勿以善小而不为
    2009年6月22日 7:03
  • 就只剩检测重命名了,你可以通过Directory.GetFile方法返回指定目录下的文件名,把返回的文件名一一和你要添加的文件名比较!
    周雪峰
    2009年6月22日 7:31
    版主
  • file 有  exists 方法


    而且  QQ的表情文件名一般都是文件内容的hash  所以不大可能出现文件名不同  内容一样的状况


    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年6月22日 8:14
    版主