質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

13280閲覧

VB.NETにおけるファイルのコピーの方法

Alice0225

総合スコア206

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/01/25 06:53

編集2016/01/25 06:54

現在、VB.NETを使用して、

設定ファイル(.config)を読み込み、指定されたフォルダ内の全てのファイルを指定されたコピー先フォルダへコピーする

という簡単なアプリケーションを勉強として作成しています。
VB.NET自体経験が浅く、ネットにて調べながら作業を行っているのですが
不明点にあたり、どうしたものかわからなくなってしまったので質問を投稿させていただきました。

VB.NET

1'メインクラス 2Public Class Main 3 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 4 Dim strFile As String 5 Dim コピー先フォルダ As String = Configuration.ConfigurationManager.AppSettings("Folder00") 6 Dim 経理課フォルダ As String = Configuration.ConfigurationManager.AppSettings("Folder01") 7 8 For Each strFile In System.IO.Directory.GetFiles(経理課フォルダ, "*.*") 9 FileCopy(strFile, コピー先フォルダ) 10 Next 11 12 End Sub 13End Class

VB.NET

1コンフィグファイル(.config) 2<?xml version="1.0" encoding="utf-8" ?> 3<configuration> 4 <system.diagnostics> 5 <sources> 6 <!-- このセクションでは、My.Application.Log のログ構成を定義します。 --> 7 <source name="DefaultSource" switchName="DefaultSwitch"> 8 <listeners> 9 <add name="FileLog"/> 10 <!-- アプリケーション イベント ログに書き込むには、以下のセクションのコメントを解除します --> 11 <!--<add name="EventLog"/>--> 12 </listeners> 13 </source> 14 </sources> 15 <switches> 16 <add name="DefaultSwitch" value="Information" /> 17 </switches> 18 <sharedListeners> 19 <add name="FileLog" 20 type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 21 initializeData="FileLogWriter"/> 22 <!-- アプリケーション イベント ログに書き込むには、以下のセクションのコメントを解除して、APPLICATION_NAME をアプリケーション名に置き換えます --> 23 <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> --> 24 </sharedListeners> 25 </system.diagnostics> 26 <appSettings> 27 <add key="Folder00" value="C:\Users\XXXXX\Desktop\コピー先フォルダ" /> 28 <add key="Folder01" value="C:\Users\XXXXX\Desktop\Sample\経理課" /> 29 <add key="Folder02" value="C:\Users\XXXXX\Desktop\Sample\庶務課" /> 30 <add key="Folder03" value="C:\Users\XXXXX\Desktop\Sample\総務課" /> 31 </appSettings> 32</configuration>

設定ファイルに記述されたフォルダ指定が設定ファイルから読み込めること、ファイルが一覧で取得できること(MsgBox使用)までは正しく動作していることが確認できました。

あとはフォルダ内のファイル数分、指定されたフォルダへファイルをコピーさせるだけなのですが、方法がイマイチわかりません...

VB.NET

1FileCopy(strFile, コピー先フォルダ)

これでコピーできるものと思い込んでいたのですが、コピー先にはフォルダでなくファイルを指定しなければならない(?)という旨のエラーが出てしまい、思い通りの結果が得られないでいます。
ネットで調べると

VB.NET

1FileCopy("C:\test\1.txt", "C:\test\2.txt")

と書いてあるのですが、FileCopyでは私の想定している動作は行えないのでしょうか。
長文・乱文申し訳ございませんが、解決方法をご存知の方がいらっしゃいましたらご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コピーするときにフルパスを与えるのはしょうがないのですが・・・
DirectoryInfo と FileInfo を使って、以下のようなコードではどうでしょうか。

VB.net

1Dim コピー先フォルダ As System.IO.DirectoryInfo = New IO.DirectoryInfo(Configuration.ConfigurationManager.AppSettings("Folder00")) 2Dim 経理課フォルダ As System.IO.DirectoryInfo = New IO.DirectoryInfo(Configuration.ConfigurationManager.AppSettings("Folder01")) 3 4For Each file As System.IO.FileInfo In 経理課フォルダ.EnumerateFiles() 5 file.CopyTo(コピー先フォルダ.FullName & System.IO.Path.DirectorySeparatorChar & file.Name) 6Next

簡略化してますが、ファイルが存在しているか、ディレクトリが存在しているか、などのチェックは必要と思います。

投稿2016/01/25 09:41

編集2016/01/25 09:42
Toyoshima

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

FileCopyを使用されるのであれば

VB

1FileCopy("コピー元フォルダ+コピー元ファイル名", "コピー先フォルダ+コピー元ファイル名”)

としてみてはどうでしょうか。

フォルダ指定のみでコピーがしたい場合はMy.Computer.FileSystem.CopyFile メソッドを使うとよいと思います。

投稿2016/01/25 07:10

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alice0225

2016/01/25 07:33

ご回答ありがとうございます。 For Each以下を For Each strFile In System.IO.Directory.GetFiles(経理課フォルダ, "*.*") Dim a As Integer = (InStrRev(strFile, "\")) Dim strName = strFile.Substring(a) FileCopy(strFile, コピー先フォルダ & "\" & strName) Next とすることで目的の動作は実現したのですが、イマイチスマートな書き方で無いと思うのですが改良するとすればどのような書き方が考えられますでしょうか…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問