ファイルコピーで更新日時がずれる原因と解決法

このQ&Aのポイント
  • XP pro + Visual Basic 2008を使用してファイルをバックアップするソフトを作成しています。ListView1からListView2へのファイルコピーで更新日時が数秒ずれてしまいます。逆の場合はずれが起こらないようです。どのような原因が考えられるか、また解決法を教えてください。
  • ListView1からListView2へのファイルコピーを行うと、更新日時が数秒ずれてしまいます。しかし、逆の場合はずれが起こらないようです。ファイルコピーに関する原因と解決法を教えてください。
  • XP pro + Visual Basic 2008でファイルをバックアップするソフトを作成しています。ListView1からListView2へのファイルコピーを行うと、更新日時がずれる現象が発生しています。この原因と解決法について教えてください。
回答を見る
  • ベストアンサー

ファイルコピーで更新日時が変わってしまう。

XP pro + Visual Basic 2008 で、ファイルをバックアップするためのソフトを作ろうとしています。 ListViewを二つ用意して、それぞれに対象となるフォルダー内のファイルを表示、チェックリストにチェックしたファイルを、互いのフォルダーにコピーする。のようなものを作っています。 しかしListView1からListView2へコピーを行うと、どういうわけか更新日時が数秒づれてコピーされてしまいます。逆の場合はづれが起こらないようです。 原因&解決法を教えてください。 コードは以下の通りです。    Dim i As Integer    Dim response As MsgBoxResult    i = 0    response = MsgBox("リスト1の選択ファイルをコピーしますか?", MsgBoxStyle.YesNoCancel, "確認")    If response = MsgBoxResult.No Then       GoTo CopyRist2    ElseIf response = MsgBoxResult.Cancel Then       Exit Sub    End If    Do Until i >= ListView1.Items.Count       If ListView1.Items(i).Checked = True Then          My.Computer.FileSystem.CopyFile(フォルダ1のパス & "\" & ListView1.Items(i).Text, _             フォルダ2のパス & "\" & ListView1.Items(i).Text, True)          ListView1.Items.RemoveAt(i)       Else          i = i + 1       End If    Loop CopyRist2:    i = 0    response = MsgBox("リスト2の選択ファイルをコピーしますか?", MsgBoxStyle.YesNoCancel, "確認")    If response = MsgBoxResult.No Then       Exit Sub    ElseIf response = MsgBoxResult.Cancel Then       Exit Sub    End If    Do Until i >= ListView2.Items.Count       If ListView2.Items(i).Checked = True Then          My.Computer.FileSystem.CopyFile(フォルダ2のパス & "\" & ListView2.Items(i).Text, _             フォルダ1のパス & "\" & ListView2.Items(i).Text, True)          ListView2.Items.RemoveAt(i)       Else          i = i + 1       End If    Loop 以上です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://support.microsoft.com/kb/127830/ja (機械翻訳でところどころ変ですが) これではないでしょうか

関連するQ&A

  • ListViewの複数項目削除で再度質問です

    ArrayListのソートの件とListViewのおかしな挙動は解決できたのですが 最初に質問して解決したはずの削除の部分で再び分からなくなって しまったので質問させて頂きます。 今回は本体に今までのコードを正式に組み込んで、動作の確認を 行っていたのですが、複数件(連続や個別選択)のデータ削除を 行おうとしたら意図しないデータ(未整列状態の並びのデータ)が 削除されてしまうという事態が発生してしまいました。 これはどうすれば解決できるのでしょうか? また複数件の未読既読を制御(選択された項目に対してフラグを 入れ替える)するのも同様の方法で出来るのでしょうか? 環境はVS2005(C#)、.NET Framework2.0です。 以下に問題の削除時のコードを載せます。 private void menuDelete_Click(object sender, EventArgs e) { // 選択アイテムが0のときは反応にしない if(listView1.SelectedItems.Count == 0){ return; } if(listView1.Columns[0].Text == "差出人"){ // 受信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].Add(collectionMail[RECEIVE][sel_index]); collectionMail[RECEIVE].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "宛先"){ // 送信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].Add(collectionMail[SEND][sel_index]); collectionMail[SEND].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "差出人または宛先"){ // 削除メールのとき if(MessageBox.Show("選択されたメールは完全に削除されます。\nよろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK){ for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].RemoveAt(sel_index); } } this.textBody.Text = ""; } } // ツリービューとリストビューの表示を更新する UpdateTreeView(); UpdateListView(); // 選択している位置がリストの件数よりも少ないとき if(currentRow < listView1.Items.Count){ // 選択していた位置-1の行にフォーカスを当て直す listView1.Items[currentRow - 1].Selected = true; listView1.Items[currentRow - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } else{ // リストの件数が1以上の時 if(listView1.Items.Count > 0){ // ListViewの行数位置-1の行にフォーカスを当て直す listView1.Items[listView1.Items.Count - 1].Selected = true; listView1.Items[listView1.Items.Count - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } } }

  • VBScriptでのファイルコピー

    こんにちは いつもお世話になります。 現在、「ファイルの指定ダイアログ」で選択されたファイルの中身(ファイル名) と「フォルダ指定ダイアログ(参照先)」で選択されたフォルダ(サブフォルダ含む) 内のファイルの名前を比較して、一致しているファイルを「フォルダ指定ダイアログ (保存先)」にコピーし、一致しないファイル名を同じく「フォルダ指定ダイアログ (保存先)」に出力するというツールを作成しています。 以下を実行させても、ファイルのコピーも出力もされないのですが、教えていただけます でしょうか。 宜しくお願い致します。 ---------------------------------------------------------------------- <html><head> <script language="VBScript"> 'Call Window.ResizeTo(500,200) Set objFso = CreateObject("Scripting.FileSystemObject") 'テキストファイル吐き出し場所 Const LIST_FILE = "C:\Documents and Settings\All Users\デスクトップ\NonFile.txt" '色々宣言 Dim objFso Dim inFolderName Dim outFolderName Dim inFileName Dim objTxIn Dim ListFile Dim CurrentFileName '色々定数 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '参照フォルダをテキストに表示 '------------------------------------------------------------ sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 '------------------------------------------------------------ sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then 'MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '------------------------------------------------------------ Sub btn_onClick 'ファイルの有無チェック txOut="" inFileName = inFile.Value outFolderName = ofd.value If objFso.FileExists(inFileName) = True Then Set ListFile = objFso.OpenTextFile(inFileName,ForReading,false,TristateTrue) 'ファイルが無いとき Else MsgBox("ファイルが選択されていません。") End If Call iFolder(inFolderName) MsgBox("完了") End Sub 'サブフォルダ内ファイル検査→有 コピー/無 テキスト出力 '------------------------------------------------------------ Sub iFolder(inFolderName) CurrentFileName="" 'フォルダオブジェクト取得 outFolderName = ofd.value If inFolderName ="" then inFolderName = ifd.value Set fsoFolder = objFso.GetFolder(inFolderName) On Error Resume Next CurrentFileName = ListFile.ReadLine For Each fsoFile In fsoFolder.Files If fsoFile.Name = CurrentFileName Then fsoFile.Copy outFolderName,CurrentFileName,false Else set NoFile = objFso.CreateTextFile(LIST_FILE,True) NoFile.WriteLine(CurrentFileName) NoFile.Close End If fsoFile.Close Set fsoFile = Nothing Next For Each fsoSubFolder In fsoFolder.SubFolders Call iFolder(fsoSubFolder) Next End Sub </script> </head>

  • vb.net コピーの進捗をプログレスバーで

    質問ばかりでもうしわけないのですが タイトルにあるようにコピーの状況を プログレスバーで表示できたらなと思い作成したのですが うまく動きません。 プログレスバー自身単独では動くのですがコピーと合わせると フリーズしてしまいます。 プログラミング経験と発想力が乏しいのでご教授いただけたら幸いです Private Sub Bt_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_1.Click Dim fname1 As String = "C:\フォルダ名A" Dim fname2 As String = "C:\フォルダ名B" Dim ber1 As Integer If IO.Directory.Exists(fname1) = True Then Me.Lb_1.Text = "テキスト文字" For ber1 = 0 To 20 Me.ProgressBar1.Value = ber1 System.IO.File.Copy("コピー元テキストファイルA", "コピー先テキストファイルA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダA", "コピー先フォルダA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダB", "コピー先フォルダB", True) Next ber1 If IO.Directory.Exists(fname2) = True Then System.IO.File.Copy("コピー元ファイルB", "コピー先ファイルB", True) End If MessageBox.Show("終了報告テキスト", "タブ名") ' System.IO.Directory.Delete("コピー元", True) Me.ProgressBar1.Value = 0 Application.Exit() こんな感じで作成しております。 ファイル自身が1GBぐらいあるので フリーズしていないかプログレスバーや%表示でしらせたいので 教えていただけると助かります。 よろしくお願いします。

  • メッセージボックスの使い方の確認

    VB.netを使っています。 メッセージボックスのことでわからなくなったので、 質問させてください。 If MsgBox(・・・・, MsgBoxStyle.YesNoCancel, MessageBoxDefaultButton.Button3) = MsgBoxResult.Yes Then ElseIf MsgBoxResult.No Then End ElseIf MsgBoxResult.Cancel Then Call sWaitTime(5000) End If こういう感じで作っていまして、はいをクリックすると次の処理に移ります。 いいえだとendの処理をしてくれます。ところがキャンセルをクリックしてもendの処理をしてしまいます。 どうにか待機の処理をさせたいのですがどうしたらよいのでしょうか?

  • フォルダ内のファイルのコピーについて

    ルートフォルダとサブフォルダ内のファイルのコピーについて 教えてください。 繰り返しの処理にてサブディレクトリ内のファイル名などの取得は 可能なのですが、コピーをしようとすると「書込みできません」の エラーになってしまいます。 Fname = fsoFile.Name 全ファイル名 objFso.CopyFile iFName &"\"& Fname, oFName,True iFName と oFName はそれぞれ、ダイアログで指定したフォルダの pathが入ります。 また、フォルダコピーであれば問題なくコピーされ、ファイル名を テキストにも出力できます。 objFso.CopyFolder iFName , oFName,True objT.WriteLine Fname 以上、宜しくお願いします。

  • VBSでファイルをコピーして名前変更

    VBSで現在下記のようなコードを組んでいます。 動作としてはコードが組んであるVBSファイルにエクセルシートをドラック&ドロップすると、ブックのパスが外れてファイル名の先頭に シート内のセルE5の文字がつくようになっています。 そしてそのファイル名に指定した文字がある場合 指定したフォルダへ移動されます。 今回行いたいのは、その移動したあとの処理で 移動したファイルをそのフォルダ内でコピーして 名前を変更したいです。 例えば移動してきたファイル名が #101-1test.xlsxだとして、そのファイルをコピーして ABC101-1_DEFG.xlsxという名前で同じフォルダ内にコピーしたい。 ファイルの中身は同じだけど、名前を変更して同じフォルダ内に ファイルを作成したいということです。 ちなみに移動してきた時の始めのファイル名、#〇〇〇-〇は必ずこの形です。 なので、頭のシャープと-1以降の文字を削除して 〇〇〇の手前につける文字と、-〇以降につける文字が指定できれば完璧です。 このようなことができるかわかりませんが、よろしくお願いします。 よろしくお願いします。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="aaaaa" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,4) )="xlsx" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if Dim n n = wb.Worksheets(1).Range("E5").Value & "_" & wb.Name wb.close FSO.GetFile(objFile.Path).Name = n If Mid(objFile.name, 5, 2) = "-1" Then FSO.MoveFile objFile.path, "F:\A\" Else MsgBox objFile.Name & " 該当せず" End If set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing

  • エクセル(VBA)でファイル名(サブフォルダ含む)、更新日時を表示させたい

    エクセルのVBAであるフォルダ以下の全てのファイル名と更新時間をエクセルシート上に表示させたく、以下のプログラムを作成したのですが 、サブフォルダ内のファイルを表示させることができません。何か良い方法がありましたら教えていただけないでしょうか?宜しくお願いいたします。 Sub SAMPLE() Dim serchPass As String j = 1 Mypath = "C:\My Documents\" MyName = Dir(Mypath, vbDirectory) Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' フォルダであれば、それを表示します。 Else: GoTo 10 End If serchPass = Mypath & MyName With Application.FileSearch .NewSearch .LookIn = serchPass If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + j, 1).Value = .FoundFiles(i) Cells(i + j, 3) = FileDateTime(.FoundFiles(i)) Next i j = i + j End If End With 10 End If    MyName = Dir ' 次のフォルダ名を返します。 Loop End Sub

  • ファイルコピーとコードの綺麗な書き方について

    質問です。 特定のファイル名を複数コピーする場合、 理想な処理はなんでしょうか? 1. IF文でファイルを確認してコピー処理 2. *.txtにファイル名を予め書き込んでおいて、   1行づつ読み込んで検索してコピー処理 など…、 コードが綺麗に見えて、尚且つ何処に何があるか オープンソースにした時他人がひと目で分かるような 処理構造とはなんでしょうか? あと If File.Exists("C:\test_A.txt") Then File.Copy("C:\test_A.txt", "D:\test_A.txt", True) Else If File.Exists("C:\test_B.txt") Then File.Copy("C:\test_B.txt", "D:\test_B.txt", True) Else MessageBox.Show("test_B.txt" & vbCr & vbCr & _ "ファイルが見つかりません。再度ダウンロードして下さい", "Error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End If MessageBox.Show("test_A.txt" & vbCr & vbCr & _ "ファイルが見つかりません。再度ダウンロードして下さい", "Error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End If と永遠に書いてると、何が何処にあるのか難しいです。 一つ一つの確認に~は無い。~はある場合はコピーというのしたいです。 このIF文も何らかの形で解りやすい処理方法に変更してくれれば 幸いです。 【回答お願い】 1. 最も綺麗に見えて他人からも理解出来て処理が   重くならない方法でコピーするコードを書くには? 2. 上記で記載したIF文を500行ぐらい書いています。   もっと綺麗に書く方法はありますか?

  • ListViewで条件式を使う方法

    Visual Basic 2010でDatasetとListviewを使ってプログラムを作成しています。 DatasetのデータをListviewに表示させるプログラムは下記のコードで完成しました。 ******************************* Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ListView1 .Columns.Add("date", 40, HorizontalAlignment.Left) .Columns.Add("no", 40, HorizontalAlignment.Left) .Columns.Add("住所", 100, HorizontalAlignment.Left) showlist() End With End Sub Private Sub showlist() Try 住所TableAdapter.Fill(Kz526DataSet.住所) Catch ex As Exception MessageBox.Show(ex.Message, "住所テーブル") End Try With Kz526DataSet.住所 For i As Integer = 0 To .Rows.Count - 1 ListView1.Items.Add(.Rows(i)("date"), (i)) ListView1.Items(i).SubItems.Add(.Rows(i)("no")) ListView1.Items(i).SubItems.Add(.Rows(i)("住所")) Next End With End Sub ************************************ 次に、Datasetのデータの内一部だけListviewに表示させることにしました。そのため、テキストボックスを設けて、その日付と同じデータをListviewに表示させます。 テキストボックスを設けて、ボタンをクリックしてデータをListviewに表示させようとしたコードです。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ListView1 .Columns.Add("date", 40, HorizontalAlignment.Left) .Columns.Add("no", 40, HorizontalAlignment.Left) .Columns.Add("住所", 100, HorizontalAlignment.Left) showlist() End With End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 住所TableAdapter.Fill(Kz526DataSet.住所) With Kz526DataSet.住所 For c As Integer = 0 To .Rows.Count - 1 If TextBox1.Text = Kz526DataSet.住所.Rows(c)("data") Then ListView1.Items.Add(.Rows(c)("date"), (c)) ListView1.Items(c).SubItems.Add(.Rows(c)("no")) ListView1.Items(c).SubItems.Add(.Rows(c)("住所")) End If Next End With End Sub *************************************** このコードでは、条件式とListViewの関係がいまくいきません。エラーメッセージは次の様に表示されます。 「'3' の InvalidArgument=Value は 'index' に対して有効ではありません。 パラメーター名: index」 いろいろ試行錯誤してみましたところ、「ListView1.Items(c).SubItems.Add(.Rows(c)("no"))」のところで止まります。 if文では、Thenのあとは1行しか書けないのでしょうか。書き方をご指導ください。

  • 条件判断について教えて下さい。

    VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。

専門家に質問してみよう