System.CharをSystem.Stringに、、、

いつもお世話になっております。

現在、GetDirectoryNameメソッドでパスの情報を返して
GetFileNameで名前を返す方法で、フォルダのコピーを行おうと考えております。

しかし、実行しますと以下のエラーがでてしまいます。
解決方法等はありますでしょうか。
また、上記方法以外で、簡単にフォルダ移動ができる方法がありましたら
ご教示いただけますでしょうか。

【エラー】
繰り返し (フォルダ移動)Sub: 型 ‘System.Char’ のオブジェクトを型 ‘System.String’ にキャストできません。

何か式が誤っているような気がしますね。
入れている式を共有いただくことは出来ますでしょうか。

ワークフロー自体は見た感じでは違和感ないですね。
エラーメッセージから、何かしらの変数・引数がSystem.Charで渡ってしまっていることが原因というのはわかるのですが、心当たりになるものはありそうでしょうか。
エラーメッセージが再現できるのであれば、スタックトレース(エラーメッセージの詳細)をいただけるともう少しなにかわかるかもしれません。

こんにちは

例外の直接の原因は以下のようです。

【繰り返しアクティビティ】
要素:[conFoldar] コレクション:[System.IO.Path.GetDirectoryName(フォルダパス)]

GetDirectoryNameメソッドは文字列(String)を返します。これをFor Eachでイテレートすると
文字列の1文字1文字をcharとして繰り返します。今conFoldarがStringなので、これにCast
できないということです。

そのため、やりたいこととしては、おそらく

余談として、System.IO.Directory.GetDirectories(フォルダパス,"*")
でも試してみました。

の方が正しいように思えます。

【コードを呼び出しアクティビティ】※フォルダコピーをしております。
My.Computer.FileSystem.CopyDirectory(conFoldarName(移動元フォルダパス), 移行先フォルダパス, _
FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)

の部分でコピー元のディレクトリ名を、新しいパスに明示的に加えると、良いように思えます。

1 Like

早々のご回答ありがとうございます。

>新しいパスに明示的に加えると、良いように思えます。
現在の処理で、1行書き込みアクティビティでパスがFor Eachで取得できていることは確認できております。
ですが、なぜサブフォルダでなく中身のファイルがコピーされているかが不明です。
また、新しいパスを明示的にという部分をどのようにして加えるかがわかりません(;‘∀’)
現在、コピー元であるサブフォルダパスの値を要素であるconFoldarに格納しているので
これ以外の値はどれになるんだろう?
と考えております。
恐らく初歩的な質問になっていると思いますが、
ご教示いただけますでしょうか。

こんにちは

移動元のディレクトリがconFolderに入っているのであれば
現在移動先フォルダパスの部分を以下に変更すれば
良いように思えます。

System.IO.Path.Combine(移行先フォルダパス,System.IO.Path.GetFileName(conFolder))

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.