- 締切済み
フォルダのコピー
unamana19の回答
- unamana19
- ベストアンサー率62% (56/89)
>開始すると、応答しなくなりますが、コピーは行われました。 応答しなくなるのは、VBで作成したアプリケーションですね。 別スレッドで実行するようにしては?
関連するQ&A
- C#)フォルダを参照したい
こんにちわ。 フォルダを参照してその中身をリストBOXに表示したいのですが、サンプルを見つけて実行したのですがいまいち理解できなかったのでアドバイスくださると助かります。 private void button1_Click(object sender, System.EventArgs e) { string systemFolder = Environment.GetFolderPath (Environment.SpecialFolder.System); DirectoryInfo di = new DirectoryInfo(systemFolder); foreach(FileInfo fi in di.GetFiles()) { listBox1.Items.Add(fi.Name); } } これでボタン1をクリックするとsystemフォルダの内容がリストに表示されるのですが、そもそもどこのsystemフォルダなのか分かりません・・・。 ↑のプログラムが分からず別の方法でまずフォルダ参照ダイアログの FolderBrowserDialog を使おうと思ったのですが、ツールBOXに無いのでまた困りました。 どなたか分かる方いたらご指摘お願いします。
- ベストアンサー
- C・C++・C#
- [C#]このコードはもっと速くなると思いますか?
フォルダ内の全ファイルを取得する、以下のようなコードを組んでみました。 このコードではFileInfoを配列に入れていますが、厳密には「ファイル名」「ファイルパス」「ファイルサイズ」「更新日時」を格納したリストが欲しいです。 using System; using System.Collections.Generic; using System.Diagnostics; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); //windows xpを使っています DirectoryInfo di = new DirectoryInfo(@"C:\WINDOWS"); test(di); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); } //ファイル情報を格納する配列 static List<FileInfo> list = new List<FileInfo>(); //全ファイルの探索 static void test(DirectoryInfo di) { foreach(FileInfo fi in di.GetFiles()) list.Add(fi); foreach(DirectoryInfo ddi in di.GetDirectories()) test(ddi); } ちなみに私の環境では1000ms前後の結果になります。 このリストを取得するのに、さらにスピードアップさせる方法はあると思いますか? どんな些細な事でも良いので答えて下さるとありがたいです。
- ベストアンサー
- C・C++・C#
- 決まった拡張子のファイルだけ表示したい(C#)
こんばんわ。また質問させてください。 ボタン1を押すことでリストに指定したフォルダの中身をすべて表示するプログラムが出来たのですが、このあとテキストファイルだけを表示したい場合はどうしたらいいのでしょうか? テキストファイルだけをリストに昇順で表示して、それらテキストファイルの内容をすべて連結してみたいのでご指導してくださると助かります。 連結の方法は分かりました。 private void button1_Click(object sender, System.EventArgs e) { string systemFolder = "ここにフォルダのパス"; DirectoryInfo di = new DirectoryInfo(systemFolder); // フォルダ内のファイルをリストに表示 foreach(FileInfo fi in di.GetFiles()) { listBox1.Items.Add(fi.Name); } }
- ベストアンサー
- C・C++・C#
- ファイル名をcellに入れる方法
日ごとにつくったcsvファイルを一か月分フォルダに保存していています。日ごとのcsvファイルには一行ずつのデータが詰まっています。 それをすべて1行ずつ読み込んでdatagridviewに表示したいと思います。どうすればいいでしょうか? System.IO.Directory.GetFiles("フォルダ名", "200812??.csv") これより先に進めなくて困っています。 また、その際にファイル名の??の部分をdatagridviewの列に表示したいのですがこれはどうすればできますか?
- ベストアンサー
- Visual Basic
- すでにファイルが開かれている時のエラー回避
VB2010で、ファイルを開いていると下記のコードでエラーがでます。 Dim SR As New System.IO.StreamReader(AppPath & "諸元一覧.csv", System.Text.Encoding.Default) 「諸元一覧.csv」ファイルを閉じてください。 とメッセージを出し、ExitSubしたいのですが、 どういうコードにすればよいのでしょうか。 教えてください。よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- フォルダの中の特定のファイルを取得
(VB.NET) Dim files As String() = System.IO.Directory.GetFiles("C:\aaa", "*", System.IO.SearchOption.AllDirectories) ListBox1.Items.AddRange(files) 上記のコードでは"C:\aaa"以下のすべてのファイルを取得しますが、 例えばGetFilesメソッドの2番目のパラメータに "*.(html|htm)"などと指定して(この場合は無理でしたが)"C:\aaa"以下の拡張子が「html」または「htm」のファイルを取得するにはどうすればよいでしょうか。 "*.html"のように1種類の場合はできるのですが…。
- ベストアンサー
- Visual Basic
- FTPサーバーからのファイルコピー
勉強させてください。 vb2010.net win764bit FTPサーバーにアクセスし、FTPサーバーにあるCSVファイルをすべて 指定のフォルダにコピーしたいのです。 http://dobon.net/vb/dotnet/internet/ftpwebrequest.html#downloadfile を参考に作成しましたがうまくいきません。 1, Cドライブにコピーしたいのですが下記部分でアクセスに拒否されましたと エラーが発生します。 Dim fs As New System.IO.FileStream( _ downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write) フォルダの設定をPrivate Const PATH_Folder = " C:\DATA"から Private Const PATH_Folder = " \DATA"に変更するとサーバー上にアクセス(ファイルの書き込み) が行われます。(プログラムの保存先が影響?) 指定したローカルにコピーするにはどうしららよいでしょうか。 2,1でサーバー上にファイルの書き込みができたのですが、FTPサーバーにあるCSVのデータの内容を 書くみたいでコピーできませんでした。 fs.Write(buffer, 0, readSize)をfs.CopyTo()に変更すればいいのではないかとおもい変更してみましたが、 fs.CopyTo(ここがわからない)が理解できずに動作しません。 アドバイスよろしくお願いいたします。 Imports System.Net Imports System.IO Module Module1 'FTP用host Private Const FTP_HOST = "ftp://TEST" 'FTP用USER Private Const FTP_USER = "ftpuser" 'FTP用PASSWORD Private Const FTP_PASS = "ftppass" 'FTPファイルコピー先フォルダ Private Const PATH_Folder = " C:\DATA" Private Function FTPDownLoad() As Boolean FTPDownLoad = False 'Try 'ダウンロードするファイルのURI Dim u As New Uri(FTP_HOST) 'ダウンロードしたファイルの保存先 Dim downFile As String = PATH_Folde Sub Main() '----------------------------- '-- FTP データ取得 '----------------------------- If FTPDownLoad() = False Then body = "FTPからのデータダウンロードに失敗しました。" + vbCrLf + sys_date & sys_time Exit Sub End If Private Function FTPDownLoad() As Boolean FTPDownLoad = False 'Try 'ダウンロードするファイルのURI Dim u As New Uri(FTP_HOST) 'ダウンロードしたファイルの保存先 Dim downFile As String = Palet_PATH_Folder 'FtpWebRequestの作成 Dim ftpReq As System.Net.FtpWebRequest = _ CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest) 'ログインユーザー名とパスワードを設定 ftpReq.Credentials = New System.Net.NetworkCredential(FTP_USER, FTP_PASS) 'MethodにWebRequestMethods.Ftp.DownloadFile("RETR")を設定 'ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile ftpReq.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails '要求の完了後に接続を閉じる ftpReq.KeepAlive = False 'ASCIIモードで転送する ftpReq.UseBinary = False 'PASSIVEモードを無効にする ftpReq.UsePassive = False 'FtpWebResponseを取得 Dim ftpRes As System.Net.FtpWebResponse = _ CType(ftpReq.GetResponse(), System.Net.FtpWebResponse) 'ファイルをダウンロードするためのStreamを取得 Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream() 'ダウンロードしたファイルを書き込むためのFileStreamを作成 Dim fs As New System.IO.FileStream( _ downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write) 'ダウンロードしたデータを書き込む Dim buffer(1023) As Byte While True Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length) If readSize = 0 Then Exit While End If fs.Write(buffer, 0, readSize) End While fs.Close() resStrm.Close() 'FTPサーバーから送信されたステータスを表示 Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription) '閉じる ftpRes.Close() 'Catch ex As Exception ' MsgBox(ex.Message) ' Exit Function 'End Try FTPDownLoad = True End Function END sub
- ベストアンサー
- Visual Basic
- 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ぐらいあるので フリーズしていないかプログレスバーや%表示でしらせたいので 教えていただけると助かります。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- C# フォルダを含まないzipは?
C#で作成した、CSVをFTPでウェブサーバにアップロードするプログラムがあるのですが、 運用と共にCSVファイルのサイズと数が増えパフォーマンスが悪くなってきたので、 CSVをZIPで圧縮することにしました。 C:\data\read.csv を読み込んで同じ場所に write.zip として出力するという処理を、 System.IO.Compression 系の ZipArchive を使って、 using (var zipStream = File.Create(@"C:\data\write.zip")) { using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create)) { var entry = archive.CreateEntry("read.csv"); using (var sourceStream = File.OpenRead(@"C:\data\read.csv")) { using (var entryStream = entry.Open()) { sourceStream.CopyTo(entryStream); } } } } のようにしてみたところ、C:\data\write.zip は作成されるのですが、 これを解凍すると write\read.csv となってしまいます。 (write フォルダができて、その下に元のCSVができる。) 解凍した際にフォルダを含まないように (フォルダを含んだ圧縮ファイルにならないように) 圧縮することはできませんでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい
いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。 すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default); while(sr->Peek() >= 0){ //csvデータ分繰り返し strLine = sr->ReadLine(); //1行読み込み strData = strLine->Split(delimiter); //「,」で区切って、配列に分解 if (iWorkNum == int::Parse(strData[0])){ strData[2] = strWorkTime;//書き換えたい箇所はここだけ //※ここからの処理方法を教えて下さい。 } } } sr->Close(); fs->Close();
- ベストアンサー
- C・C++・C#
補足
そうです。VBで作成したアプリケーションが応答しなくなりました。 別スレッド?どういう方法でしょうか?