如何在使用c#打开pst文件时复制它

时间:2013-07-08 23:14:10

标签: c# visual-studio-2012

是否可以使用c#复制pst文件并打开outlook?

这是我已经获得的代码,但它仍然给我错误:进程无法访问文件'filepath',因为它正被另一个进程使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace outlookPSTCopy
{
class Program
{
    static void Main(string[] args)
    {
        string done = "the file is done copying";//done massage
        string copyFrom = args[0];
        string copyTo = args[1];
        Console.WriteLine(copyTo);
        Console.ReadLine();
        try
        {
            //start of test
            using (var inputFile = File.Open(copyFrom, FileMode.Open,    FileAccess.ReadWrite, FileShare.Read))
            {
                using (var outputFile = new FileStream(copyTo, FileMode.Create))
                {
                    var buffer = new byte[0x10000];
                    int bytes;

                    while ((bytes = inputFile.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        outputFile.Write(buffer, 0, bytes);
                    }
                }
            }



            //end of test

            //System.IO.File.Copy(copyFrom, copyTo, true);
        }
        catch (Exception copyError)
        {

            Console.WriteLine("{0} Second exception caught.", copyError);
        }

        Console.WriteLine("{0} ", done);


        Console.ReadLine();
    }
}
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

要创建在Windows上被其他进程锁定的文件的副本,最简单(也可能是唯一)的解决方案是使用卷影复制服务(VSS)。

卷影复制服务很复杂,很难从托管代码调用。幸运的是,一些优秀的人员已经创建了一个.NET类库来实现这一目标。查看CodePlex上的 Alpha VSS 项目:http://alphavss.codeplex.com