0

プログラム ファイルへのハードコードされたディレクトリ パスを使用してファイルを移動していました。正しい方法を使用して、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

を使用してプログラムファイルのような特別なフォルダを取得する方がはるかに簡単です

Environment.SpecialFolders

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

その例を続けると、次のようなことができます

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

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

アップデート

@Marioが指摘したように、32ビットOSと64ビットOSのどちらを実行していても、常に32ビットのProgram Filesフォルダーを取得するようにコード例を変更しました。これは、元のコードが行っていたことです。

于 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

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(ソース))
File.Delete(ソース);
File.Copy(targetFolderPath, ソース);

于 2012-07-19T04:02:37.380 に答える