使用GetEnvironmentVariable方法移动文件

时间:2012-07-19 03:37:03

标签: c# winforms

我使用程序文件的硬编码目录路径来移动文件。我现在想使用正确的方法在Program Files中找到该文件夹​​。

我发现这个方法正在做一些谷歌搜索,这是我想要使用的:

static string ProgramFilesx86()
{
    if( 8 == IntPtr.Size || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
    {
        return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
    }

    return Environment.GetEnvironmentVariable("ProgramFiles");
}

我很遗憾不确定如何实施和使用此方法。

  1. 我在哪里插入方法?
  2. 我如何使用上述代替:

    if (File.Exists(@"C:\PROGRA~1\TEST\ok.txt"))
        File.Delete(@"C:\PROGRA~1\TEST\ok.txt");
    File.Copy(@"C:\PROGRA~1\PROGRAMFOLDER\ok.txt", @"C:\PROGRA~1\TEST\ok.txt");
    

3 个答案:

答案 0 :(得分:4)

使用

更容易获得像Program Files这样的特殊文件夹

Environment.SpecialFolders

string programFilesFolder = 
    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

继续这个例子,你可以做这样的事情

string pathToFile = 
    Path.Combine(programFilesFolder, @"TEST\ok.txt");

if (File.Exists(pathToFile)) 
    File.Delete(pathToFile);

<强>更新

修改代码示例以始终获取32位Program Files文件夹,无论您运行的是32位还是64位操作系统,因为@Mario指出这是您的原始代码正在执行的操作。

答案 1 :(得分:0)

string fileName = Path.Combine( ProgramFilesx86(), applicationPath, @"ok.txt");

if (File.Exists( fileName ) )
{
   File.remove( fileName );
}

string sourceFile = Path.Combine( ProgramFilesx86(), @"\PROGRAMFOLDER", "ok.txt" );

File.Copy( sourceFile, fileName);

修改 你不应该使用这种方法。程序文件夹取决于程序的功能而不是系统!您必须知道它们是否安装到ProgramFiles或ProgramFilesX86文件夹中。 然后使用Eric J.的答案。

答案 2 :(得分:-1)

string sourceFolder =     Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
string source =     Path.Combine(sourceFolder,@“ok.txt”);

string targetFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string target = Path.Combine(targetFolderPath,@“ok.txt”);

if(File.Exists(source))
    File.Delete(源);
File.Copy(targetFolderPath,source);