0

我正在使用 Program Files 的硬编码目录路径来移动文件。我现在想使用正确的方法在 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");
    
4

3 回答 3

4

使用Program Files 获取特殊文件夹要容易得多

环境.特殊文件夹

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 指出的那样,这就是您的原始代码正在做的事情。

于 2012-07-19T03:43:07.397 回答
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. 的答案。

于 2012-07-19T03:49:10.883 回答
-1

字符串 sourceFolder = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
string source = Path.Combine(sourceFolder, @"ok.txt");

字符串 targetFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 字符串目标 = Path.Combine(targetFolderPath, @"ok.txt");

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

于 2012-07-19T04:02:37.380 回答