6

現在のディレクトリパスを取得したいのですが、アプリケーションの場所ではなく、ショートカットの場所です。

これらを試しましたが、アプリケーションの場所が返されます。

Directory.GetCurrentDirectory();
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
4

7 に答える 7

5

COM オブジェクト参照の追加が問題にならない場合は、COM オブジェクト参照の追加 - Windows スクリプト ホスト オブジェクト モデル

デスクトップフォルダーでこのコードを実行したところ、うまくいきました。現在のフォルダ用 - Environment.CurrentDirectory

using System;
using System.IO;
using IWshRuntimeLibrary;  //COM object -Windows Script Host Object Model

namespace csCon
{
    class Program
    {
        static void Main(string[] args)
        {
            // Folder is set to Desktop 
            string dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            var di = new DirectoryInfo(dir);
            FileInfo[] fis = di.GetFiles();
            if (fis.Length > 0)
            {
                foreach (FileInfo fi in fis)
                {
                    if (fi.FullName.EndsWith("lnk"))
                    {
                        IWshShell shell = new WshShell();
                        var lnk = shell.CreateShortcut(fi.FullName) as IWshShortcut;
                        if (lnk != null)
                        {
                            Console.WriteLine("Link name: {0}", lnk.FullName);
                            Console.WriteLine("link target: {0}", lnk.TargetPath);
                            Console.WriteLine("link working: {0}", lnk.WorkingDirectory);
                            Console.WriteLine("description: {0}", lnk.Description);
                        }

                    }
                }
            }
        }
    }
}

ここに画像の説明を入力

フォーラムからのコード参照: http://www.neowin.net/forum/topic/658928-c%23-resolve-lnk-files/

于 2013-04-21T05:39:38.110 に答える
1

これを試して:

Environment.CurrentDirectory

MSDNから:

現在の作業ディレクトリの完全修飾パスを取得または設定します。

于 2013-04-02T07:59:09.217 に答える
0

ショートカットの作成はワークフローの一部であるため、ショートカットの作業ディレクトリを「%cd%」に設定し、アプリで次を使用します。

Environment.CurrentDirectory

明らかに、アプリが呼び出すコードで値が変更される前に、この値を取得する必要があります。

Windows エクスプローラーを使用してショートカットを作成する場合、作業ディレクトリを設定するオプションはありません。そのため、作成後、右クリックして [プロパティ] を選択してプロパティ ページを開き、[開始]フィールドを に設定し%cd%ます。このようなショートカットを作成したら、アプリを実行するフォルダーに移動またはコピーできます。

于 2013-04-20T02:49:18.590 に答える
0

System.Reflection を使用します。

 string currentAssemblyDirectoryName = Path.GetDirectoryName(
                                        Assembly.GetExecutingAssembly()
                                                .Location
                                        );

また、使用できるWebアプリケーションの場合:

ウェブ アプリケーション:

Request.PhysicalApplicationPath

http://msdn.microsoft.com/en-us/library/system.web.httprequest.physicalapplicationpath.aspx

アプリケーションパスを取得するには:)

于 2013-04-19T21:09:12.960 に答える
0

他の回答で提案されているようにCOMオブジェクトを使用したくない場合

ファイルを通常のテキスト ファイルとして開き、\x000 文字で分割して、結果の文字列配列を調べることができます。"C:\path\to\file"それらの 1つは明らかにリンク ターゲットになります"\\computers\path\to\file"

string lnkFilePath  "...";

var file = System.IO.File.ReadAllText(lnkFilePath);
var contents = Regex.Split(file, "[\x00]+");
var paths = contents.Where(line => Regex.IsMatch(line, @"^([A-Z]:\\|^\\\\)\S+.*?"));
于 2019-05-15T08:13:14.870 に答える