C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ファイルシステムのディレクトリpathの指定方法について

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■100874 / inTopicNo.1)  ファイルシステムのディレクトリpathの指定方法について
  
□投稿者/ 高橋 (4回)-(2022/11/12(Sat) 16:39:19)

分類:[.NET 全般] 

AとBが実在のディレクトリとします。
AはBの上位です。
すると、カレントディレクトリを設定するために
パスの指定様式に

path = "/A/B/" と path = "/A/B" がありますが、

何が違うのでしょうか?

両方とも
失敗したり、成功したりする経験があったので、
自分の推測では、Bの直下のディレクトリを参照しようとする場合、path = "/A/B" にして、
Bの直下のファイルを参照しようとする場合、path = "/A/B/" にすべきだと、
正しいかどうか。


宜しくお願いいたします。



引用返信 編集キー/
■100875 / inTopicNo.2)  Re[1]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ とっちゃん (770回)-(2022/11/12(Sat) 17:12:25)
No100874 (高橋 さん) に返信
> AとBが実在のディレクトリとします。
> AはBの上位です。
> すると、カレントディレクトリを設定するために
> パスの指定様式に
>
> path = "/A/B/" と path = "/A/B" がありますが、
>
> 何が違うのでしょうか?
>
> 両方とも
> 失敗したり、成功したりする経験があったので、
> 自分の推測では、Bの直下のディレクトリを参照しようとする場合、path = "/A/B" にして、
> Bの直下のファイルを参照しようとする場合、path = "/A/B/" にすべきだと、
> 正しいかどうか。
>
よくあるのは

fileName = "c.txt"

とあった場合、

filePath = path + fileName;

のような処理をしたい場合で変わってくることが多いです。

前者の場合、最後が区切り文字になっているので、文字列として結合した結果、
"/A/B/c.txt"
になります。
ですが、後者の場合は区切り文字がないため、
"/A/Bc.txt"
となってしまい、異なるフルパスになってしまいます。

よくあるのが、こういったファイルパスを自分で組み立てる場合のミスですね。

python であれば、こういったミスを防ぐため os.path.join() API を使うことで回避ができます。

ほとんどのプログラミング言語にパス組み立て用のAPIがありますので
不慣れな場合、ネットなどで検索してみるとよいと思います。
今回であれば、
"言語名 path 結合"
で検索すれば、ほぼトップにその言語向けのパス結合APIが見つかると思います。

引用返信 編集キー/
■100876 / inTopicNo.3)  Re[2]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ 高橋 (5回)-(2022/11/12(Sat) 18:43:20)
No100875 (とっちゃん さん) に返信

お世話になっております。
ありがとうございます!

Pythonご存知の方ですね、助かります。
Python環境として利用しているのはGoogle Colaboratoryですので、OSは分かりません。
Colabのdir構造を下記のように仮定します

/A/B/C
/A/D/E


カレント dir= B
Dの下のdir E をimportするためにBの相対パスを下記のように設定することで、
目的達成できるそうですが、どっちが本当かは分からなくなります。

sys.path.append("../D")
sys.path.append("../D/")

最初は1番目の様式で、Eのimportを失敗(Eというパッケージがないというエラー)したので
2番目の様式に変更して、成功しました。

今や再び1番目の様式に戻しても成功にimportしています。

恐らく、Google Colaboratory 側に正しいimport情報をキープしているかな。
なので、上記2つの様式のどれが本当に正しいかどうかは分からなくなります。

アイディアをいただければ、幸いです。






引用返信 編集キー/
■100877 / inTopicNo.4)  Re[1]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ 伝説のカレー (52回)-(2022/11/13(Sun) 20:12:46)
No100874 (高橋 さん) に返信

print(sys.path)で既存のものを出力するとどれも末尾に/は付いてませんでした
os.path.normpath("a/b/")の結果がa/bになることからも末尾の/は入れない方が無難な気がします

POSIXではa/b/はa/b/.と解釈されるようですね
https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11

sys.path.append("../D")と書いたときにimportが失敗した件についてはたまたまそうなったんじゃないかなと…
Google Colaboratoryでググったところ

https://qiita.com/k4zuya/items/abe2362f61d53285d219
> どうやら一発で読み込んでくれない時もあるみたいです。

という情報があったのでそう思いました
引用返信 編集キー/
■100890 / inTopicNo.5)  Re[2]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ HattariB (45回)-(2022/11/15(Tue) 21:07:41)
No100877 (伝説のカレー さん) に返信
> POSIXではa/b/はa/b/.と解釈されるようですね
> https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11

エビデンスが見つからないので恐縮なんですが、最新のPOSIXでは「そこは曖昧だった...」
みたいな理由が付いて、破棄されたような覚えがあります。

実装はそのままなんですけどね。

No100874 (高橋 さん) に返信
> 何が違うのでしょうか?
とりあえずこれ↓見てみてください。
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/path_resolution.7.html

ちなみに、NT以外のwindowsにおけるファイルパスの指定仕様は、POSIXとは無関係。

引用返信 編集キー/
■100892 / inTopicNo.6)  Re[3]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ HattariB (47回)-(2022/11/16(Wed) 20:47:49)
エビデンスは見つかってないんだけど、新しめのPOSIXの当該記載↓
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13
引用返信 編集キー/
■100951 / inTopicNo.7)  Re[4]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ 高橋 (6回)-(2022/12/05(Mon) 13:20:36)

伝説のカレーさま、HattariB さま
ご説明と情報ありがとうございます!
いろいろ良い勉強になりました。

心より感謝致します。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ