今動いているプログラムファイルのパス(ディレクトリとファイル)を取得してみましょう。現在のプログラムファイルであって、カレントディレクトリとは異なります
C#
いくつかの方法があります。プログラムを使用する環境で正しい値が返ってくることを確認しましょう
// .NET5 以降のばあい(ディレクトリのみ)
using System;
string ディレクトリ = System.AppContext.BaseDirectory;
カミュプリィがつくった次のプログラム↓は、↑この方法を使っています
// プロセスを使う方法
using System.Diagnostics;
string パス = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
// フォームを使う方法(コンソールアプリ可)
using System.Windows.Forms;
パス = Application.ExecutablePath;
// コマンドラインを使う方法
// デバッグでは *.dll になり、単一ファイルにまとめると *.exe になる
using System;
using System.IO;
c.IO.FileInfo ファイル = new System.IO.FileInfo(System.Environment.CommandLine.Replace("\"", "")); // パラメータがないと仮定
string パス = System.IO.Path.Combine(ファイル.DirectoryName, ファイル.Name);
// 与えられた情報を使う方法
// デバッグでは *.dll になり、単一ファイルにまとめるとブランクになる
using System.Reflection;
パス = System.Reflection.Assembly.GetExecutingAssembly().Location;
Python
CGIとCronで共通のパスを取得できませんでした。詳しくは次の記事にまとめてあります↓
Lotus Script
ノーツドミノではデータベースにプログラムが含まれますので、データベースのパスを取得します
データベースのファイル名に日本語を使うと、環境によって問題が起こることがあります。また&記号を使うと、検索で問題が起こることがありますので注意しましょう
バックエンド
Lotus Script には普遍的な方法と、ユーザーインターフェース(UI)から取得する方法のふたつがあります。ここでは便宜的に、普遍的な方法をバックエンドといい、ユーザーインターフェースをフロントエンドといいます
↓次はバックエンドの方法です。フロントエンドでも動きます
Dim セッション As New NotesSession()
パス = セッション.CurrentDatabase.FilePath
フロントエンド
↓こちらはユーザーインターフェース(UI)から取得する方法です
Dim ユーザーインターフェース As New NotesUIWorkspace()
パス = ユーザーインターフェース.CurrentDatabase.FilePath
Lotus 式言語
式言語では、Lotus Script でいうフロントエンドしかありません
パス = @Subset(@DbName; -1);
@DbNameは{サーバー; パス}を複数値で戻します。ここから最後のひとつの値を得るために@Subset(; -1)を使います
コメントを残す