如何从C#调用ReplaceFile函数?

时间:2016-05-25 04:30:26

标签: c# winapi

我搜索了很多关于此的内容并且找不到任何解决方案,所以在此发帖。 来自Microsoft document

BOOL WINAPI ReplaceFile(
      _In_       LPCTSTR lpReplacedFileName,
      _In_       LPCTSTR lpReplacementFileName,
      _In_opt_   LPCTSTR lpBackupFileName,
      _In_       DWORD   dwReplaceFlags,
      _Reserved_ LPVOID  lpExclude,
      _Reserved_ LPVOID  lpReserved
    );

我需要在c#中实现这个现在的基本结构。

[DllImport("kernel32", SetLastError = true)]
    private static extern bool ReplaceFile(
       ///argument implemetation here
    );

但我不知道如何在c#中实现参数。我google了很多但没有得到解决方案。 任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:4)

根据pinvoke.net上的ReplaceFile信息,这就是您所需要的:

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool ReplaceFile(
   string           lpReplacedFileName,
   string           lpReplacementFileName, 
   string           lpBackupFileName, 
   ReplaceFileFlags dwReplaceFlags, 
   IntPtr           lpExclude, 
   IntPtr           lpReserved);

[Flags]
enum ReplaceFileFlags : uint
{
    REPLACEFILE_WRITE_THROUGH       = 0x00000001,
    REPLACEFILE_IGNORE_MERGE_ERRORS = 0x00000002,
    REPLACEFILE_IGNORE_ACL_ERRORS   = 0x00000004,
}

为最后两个参数传递IntPtr.Zero。根据{{​​3}},它们没有被使用。相同的文档将解释其他参数的用途。