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

わんくま同盟

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

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


(過去ログ 121 を表示中)
■72777 / )  Re[1]: C#でディレクトリを維持したままコピーしたい
□投稿者/ 魔界の仮面弁士 (50回)-(2014/07/14(Mon) 21:15:19)
2014/07/15(Tue) 14:46:18 編集(投稿者)

No72775 (pod さん) に返信
> ファイルの絶対パスから親ディレクトリからの相対パス(images\sample.jpg)を取得し、
> コピー先もその相対パスと同じ構造になるようにするにはどのようにすればいいのでしょうか?

とりあえず思いついたのは、こういった流れですね。

1) 絶対パスと基準パスから、相対パスを取得する。
2) それをコピー先ディレクトリに対して Path.Combine 等で結合し、コピー先の絶対パスを得る。

相対パスを求めるサンプルについては、google ってみたら下記がヒットしました。
http://www.itlab51.com/?p=2092
http://sky.geocities.jp/freakish_osprey/CsTips/CsTips_relative_path.htm


> 「C:\~\target」がコピー元で「C:\~\dest」がコピー先のディレクトリとなっている時、
> 「C:\~\target\images\sample.jpg」は「C:\~\dest\images\sample.jpg」となるようにコピーします。
いろいろな方法があるとは思いますが、一例として。

string コピー先 = @"C:\~\dest\";
string コピー元 = @"C:\~\target\";
string 元ファイル = @"C:\~\target\images\sample.jpg";

Uri a = new Uri(コピー元);
Uri b = new Uri(元ファイル);
Uri c = a.MakeRelativeUri(b);

Uri x = new Uri(コピー先);
Uri y = new Uri(x, c);

// string 結果パス = @"C:\~\dest\images\sample.jpg";
string 結果パス = (Uri.UnescapeDataString(y.LocalPath) + Uri.UnescapeDataString(y.Fragment));



---- 以下蛇足 ----

Windows 98 では "A.TXT" と "a.TXT" が区別されますが
Windows 2000 では同一視されます。

ファイル名でもディレクトリ名でも同様ですので、
相対パスを作成する場合にはご注意ください。

今更 Win9x ということも無いと思いますが、念のため。

# Win98 で使用していた FAT32 ドライブを、現行 OS に
# 接続して開いた場合、これが原因でファイルの取り違いが
# 発生するという事故が…。
返信 編集キー/


管理者用

- Child Tree -