質問編集履歴

5

プログラムが見にくかったので更新

2018/07/16 03:54

投稿

maple123
maple123

スコア9

test CHANGED
File without changes
test CHANGED
@@ -98,8 +98,6 @@
98
98
 
99
99
  }
100
100
 
101
- ```
102
-
103
101
 
104
102
 
105
103
  private void button1_Click(object sender, EventArgs e)
@@ -155,3 +153,5 @@
155
153
  }
156
154
 
157
155
  }
156
+
157
+ ```

4

プログラムが見にくかったので更新

2018/07/16 03:54

投稿

maple123
maple123

スコア9

test CHANGED
File without changes
test CHANGED
@@ -34,13 +34,15 @@
34
34
 
35
35
  ###C#
36
36
 
37
+ ```C#
38
+
37
39
  private void button2_Click(object sender, EventArgs e)
38
40
 
39
41
  {
40
42
 
41
43
  //FolderBrowserDialogクラスのインスタンスを作成
42
44
 
43
-   FolderBrowserDialog fbd = new FolderBrowserDialog();
45
+ FolderBrowserDialog fbd = new FolderBrowserDialog();
44
46
 
45
47
  //上部に表示する説明テキストを指定する
46
48
 
@@ -95,6 +97,8 @@
95
97
  }
96
98
 
97
99
  }
100
+
101
+ ```
98
102
 
99
103
 
100
104
 

3

プログラムが見にくかったので更新

2018/07/16 03:53

投稿

maple123
maple123

スコア9

test CHANGED
File without changes
test CHANGED
@@ -16,138 +16,138 @@
16
16
 
17
17
 
18
18
 
19
+ ###質問内容追加(20180716 12:47)
20
+
21
+ ・zipファイル内にディレクトリができない
22
+
23
+ ・並列で一つのzipファイルにアクセスする為例外発生
24
+
25
+
26
+
27
+
28
+
19
29
  ###画像
20
30
 
21
31
  ![イメージ図](830a04b2b4b92b9fc39378482ec46c2d.png)
22
32
 
23
33
 
24
34
 
25
- ```C#
35
+ ###C#
26
36
 
27
- private void button2_Click(object sender, EventArgs e)
37
+ private void button2_Click(object sender, EventArgs e)
38
+
39
+ {
40
+
41
+ //FolderBrowserDialogクラスのインスタンスを作成
42
+
43
+   FolderBrowserDialog fbd = new FolderBrowserDialog();
44
+
45
+ //上部に表示する説明テキストを指定する
46
+
47
+ fbd.Description = "フォルダを指定してください。";
48
+
49
+ //ルートフォルダを指定する
50
+
51
+ //デフォルトでDesktop
52
+
53
+ fbd.RootFolder = Environment.SpecialFolder.Desktop;
54
+
55
+ //最初に選択するフォルダを指定する
56
+
57
+ //RootFolder以下にあるフォルダである必要がある
58
+
59
+ fbd.SelectedPath = @"C:\Windows";
60
+
61
+ //ユーザーが新しいフォルダを作成できるようにする
62
+
63
+ //デフォルトでTrue
64
+
65
+ fbd.ShowNewFolderButton = true;
66
+
67
+ //ダイアログを表示する
68
+
69
+ if (fbd.ShowDialog(this) == DialogResult.OK)
70
+
71
+ {
72
+
73
+ //選択されたフォルダを表示する
74
+
75
+ Console.WriteLine(fbd.SelectedPath);
76
+
77
+ textBox1.Text = fbd.SelectedPath;
78
+
79
+ }
80
+
81
+ //ListBoxに一覧を表示する
82
+
83
+ listBox1.Items.Clear();
84
+
85
+ var directries = Directory.GetDirectories(fbd.SelectedPath);
86
+
87
+ foreach (var directry in directries)
28
88
 
29
89
  {
30
90
 
31
- //FolderBrowserDialogクラスのインスタンスを作成
91
+ Console.WriteLine(directry);
32
92
 
33
- FolderBrowserDialog fbd = new FolderBrowserDialog();
93
+ listBox1.Items.Add(directry);
94
+
95
+ }
96
+
97
+ }
34
98
 
35
99
 
36
100
 
37
- //上部に表示する説明テキストを指定する
101
+ private void button1_Click(object sender, EventArgs e)
38
102
 
39
- fbd.Description = "フォルダを指定してください。";
103
+ {
40
104
 
41
- //ルーフォルダを指定する
105
+ //デスクップ
42
106
 
43
- //デフォルトでDesktop
107
+ string zipFilePath = $@"{System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}\test.zip";
44
108
 
45
- fbd.RootFolder = Environment.SpecialFolder.Desktop;
109
+ //ZIP書庫を作成
46
110
 
47
- //最初に選択するフォルダを指定する
111
+ ZipFile.CreateFromDirectory(listBox1.Items[0].ToString(), zipFilePath);
48
112
 
49
- //RootFolder以下にあフォルダである必要がある
113
+ //ディレクトリ分タスクを生成す
50
114
 
51
- fbd.SelectedPath = @"C:\Windows";
115
+ List<Task<bool>> task = new List<Task<bool>>();
52
116
 
53
- //ユーザー新しいフォルダを作成できるようにする
117
+ //読み取りと書き込みができるようにして、ZIP書庫を開く
54
118
 
55
- //デフォルトでTrue
119
+ using (ZipArchive ziparchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
56
120
 
57
- fbd.ShowNewFolderButton = true;
121
+ {
58
122
 
123
+ foreach (var directry in listBox1.Items)
59
124
 
125
+ {
60
126
 
61
- //ダイアログを表示する
62
-
63
- if (fbd.ShowDialog(this) == DialogResult.OK)
127
+ task.Add(Task<bool>.Run(() =>
64
128
 
65
129
  {
66
130
 
67
- //選択されたフォルダを表示する
131
+ string[] fileList = Directory.GetFiles(directry.ToString(), "*", SearchOption.AllDirectories);
68
132
 
69
- Console.WriteLine(fbd.SelectedPath);
133
+ foreach (var file in fileList)
70
134
 
71
- textBox1.Text = fbd.SelectedPath;
135
+ {
72
136
 
73
- }
137
+ Console.WriteLine(file);
74
138
 
139
+ ZipArchiveEntry x = ziparchive.CreateEntryFromFile(file, System.IO.Path.GetFileName(file));
75
140
 
141
+ }
76
142
 
77
- //ListBoxに一覧を表示する
143
+ return true;
78
144
 
79
- listBox1.Items.Clear();
145
+ }));
80
146
 
81
- var directries = Directory.GetDirectories(fbd.SelectedPath);
147
+ }
82
148
 
83
- foreach (var directry in directries)
149
+ Task.WhenAll(task);
84
150
 
85
- {
151
+ }
86
152
 
87
- Console.WriteLine(directry);
88
-
89
- listBox1.Items.Add(directry);
90
-
91
- }
153
+ }
92
-
93
- }
94
-
95
-
96
-
97
- private void button1_Click(object sender, EventArgs e)
98
-
99
- {
100
-
101
- string zipFilePath = $@"{System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}\test.zip";//デスクトップ
102
-
103
-
104
-
105
- //ZIP書庫を作成
106
-
107
- ZipFile.CreateFromDirectory(listBox1.Items[0].ToString(), zipFilePath);
108
-
109
-
110
-
111
- //ディレクトリ分タスクを生成する
112
-
113
- List<Task<bool>> task = new List<Task<bool>>();
114
-
115
-
116
-
117
- //読み取りと書き込みができるようにして、ZIP書庫を開く
118
-
119
- using (ZipArchive ziparchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
120
-
121
- {
122
-
123
- foreach (var directry in listBox1.Items)
124
-
125
- {
126
-
127
- task.Add(Task<bool>.Run(() =>
128
-
129
- {
130
-
131
- string[] fileList = Directory.GetFiles(directry.ToString(), "*", SearchOption.AllDirectories);
132
-
133
- foreach (var file in fileList)
134
-
135
- {
136
-
137
- Console.WriteLine(file);
138
-
139
- ZipArchiveEntry x = ziparchive.CreateEntryFromFile(file, System.IO.Path.GetFileName(file));
140
-
141
- }
142
-
143
- return true;
144
-
145
- }));
146
-
147
- }
148
-
149
- Task.WhenAll(task);
150
-
151
- }
152
-
153
- }```

2

回答を受けて、作ってみました。

2018/07/16 03:48

投稿

maple123
maple123

スコア9

test CHANGED
File without changes
test CHANGED
@@ -13,3 +13,141 @@
13
13
  ###質問内容
14
14
 
15
15
  一つのzipファイルに並列処理で複数のファイルを圧縮することはそもそも可能でしょうか?
16
+
17
+
18
+
19
+ ###画像
20
+
21
+ ![イメージ図](830a04b2b4b92b9fc39378482ec46c2d.png)
22
+
23
+
24
+
25
+ ```C#
26
+
27
+ private void button2_Click(object sender, EventArgs e)
28
+
29
+ {
30
+
31
+ //FolderBrowserDialogクラスのインスタンスを作成
32
+
33
+ FolderBrowserDialog fbd = new FolderBrowserDialog();
34
+
35
+
36
+
37
+ //上部に表示する説明テキストを指定する
38
+
39
+ fbd.Description = "フォルダを指定してください。";
40
+
41
+ //ルートフォルダを指定する
42
+
43
+ //デフォルトでDesktop
44
+
45
+ fbd.RootFolder = Environment.SpecialFolder.Desktop;
46
+
47
+ //最初に選択するフォルダを指定する
48
+
49
+ //RootFolder以下にあるフォルダである必要がある
50
+
51
+ fbd.SelectedPath = @"C:\Windows";
52
+
53
+ //ユーザーが新しいフォルダを作成できるようにする
54
+
55
+ //デフォルトでTrue
56
+
57
+ fbd.ShowNewFolderButton = true;
58
+
59
+
60
+
61
+ //ダイアログを表示する
62
+
63
+ if (fbd.ShowDialog(this) == DialogResult.OK)
64
+
65
+ {
66
+
67
+ //選択されたフォルダを表示する
68
+
69
+ Console.WriteLine(fbd.SelectedPath);
70
+
71
+ textBox1.Text = fbd.SelectedPath;
72
+
73
+ }
74
+
75
+
76
+
77
+ //ListBoxに一覧を表示する
78
+
79
+ listBox1.Items.Clear();
80
+
81
+ var directries = Directory.GetDirectories(fbd.SelectedPath);
82
+
83
+ foreach (var directry in directries)
84
+
85
+ {
86
+
87
+ Console.WriteLine(directry);
88
+
89
+ listBox1.Items.Add(directry);
90
+
91
+ }
92
+
93
+ }
94
+
95
+
96
+
97
+ private void button1_Click(object sender, EventArgs e)
98
+
99
+ {
100
+
101
+ string zipFilePath = $@"{System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}\test.zip";//デスクトップ
102
+
103
+
104
+
105
+ //ZIP書庫を作成
106
+
107
+ ZipFile.CreateFromDirectory(listBox1.Items[0].ToString(), zipFilePath);
108
+
109
+
110
+
111
+ //ディレクトリ分タスクを生成する
112
+
113
+ List<Task<bool>> task = new List<Task<bool>>();
114
+
115
+
116
+
117
+ //読み取りと書き込みができるようにして、ZIP書庫を開く
118
+
119
+ using (ZipArchive ziparchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
120
+
121
+ {
122
+
123
+ foreach (var directry in listBox1.Items)
124
+
125
+ {
126
+
127
+ task.Add(Task<bool>.Run(() =>
128
+
129
+ {
130
+
131
+ string[] fileList = Directory.GetFiles(directry.ToString(), "*", SearchOption.AllDirectories);
132
+
133
+ foreach (var file in fileList)
134
+
135
+ {
136
+
137
+ Console.WriteLine(file);
138
+
139
+ ZipArchiveEntry x = ziparchive.CreateEntryFromFile(file, System.IO.Path.GetFileName(file));
140
+
141
+ }
142
+
143
+ return true;
144
+
145
+ }));
146
+
147
+ }
148
+
149
+ Task.WhenAll(task);
150
+
151
+ }
152
+
153
+ }```

1

2018/07/16 03:43

投稿

maple123
maple123

スコア9

test CHANGED
File without changes
test CHANGED
@@ -10,4 +10,6 @@
10
10
 
11
11
 
12
12
 
13
+ ###質問内容
14
+
13
15
  一つのzipファイルに並列処理で複数のファイルを圧縮することはそもそも可能でしょうか?