回答編集履歴

2

追記2

2018/09/30 08:58

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -159,3 +159,51 @@
159
159
 
160
160
 
161
161
  の方法7以外になるね。
162
+
163
+
164
+
165
+ ---
166
+
167
+
168
+
169
+ [追記2]
170
+
171
+ [MoveFile関数](https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-movefile)をお読みになりました?
172
+
173
+ 戻り値は何になっていますか? GetLastError関数っていうのを使ってエラー番号を取得するみたいです。( 私は使ったことないですが。 )
174
+
175
+
176
+
177
+ 多分、
178
+
179
+
180
+
181
+ ■ 指定した移動元のパスが間違っている
182
+
183
+ ■ 指定した移動先のパスが間違っている
184
+
185
+ ■ 書き方が例えば半角スペースを含んだ文字列のためソフト( いや、OSか? )が勘違いしている
186
+
187
+
188
+
189
+ があり得ますね。3つ目は特に コマンドプロンプトで ファイルパスを渡すときに発生します。
190
+
191
+ なので含めました。 
192
+
193
+
194
+
195
+ 多分1,2のどれかだと思う。
196
+
197
+
198
+
199
+ 実際に何らかの関数 ( printf関数, puts関数 等 ) でそれぞれ表示してみてください。
200
+
201
+ もしかしたら存在しないパスを指定しているとかじゃないかなと。
202
+
203
+
204
+
205
+ また、特殊フォルダ ( Windowsフォルダ等 ) はPCによって違ってくるので決め打ちはしないほうがいいです。
206
+
207
+ 「Windows API 特殊フォルダ 取得」みたいにして検索すればサンプルが出てきます。
208
+
209
+ **著作権を侵害しない程度に**やってみてください。

1

追記1

2018/09/30 08:57

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -9,3 +9,153 @@
9
9
  それとも「どうやって移動先や移動前のファイルパスを確定するか」でしょうか?
10
10
 
11
11
  ディレクトリ内にあるファイルを列挙すること自体ができない(どの関数を使えばいいか...)ならまだわかりますが、ここまで来たらあと一息でしょ。
12
+
13
+
14
+
15
+ ---
16
+
17
+ [追記1]
18
+
19
+ reply読みました。
20
+
21
+
22
+
23
+ ということは
24
+
25
+ ■ どの関数を使えばいいか
26
+
27
+ ■ どのように移動先を決定するか
28
+
29
+ ですね。
30
+
31
+
32
+
33
+ これはWindows限定でしょうか? それともMac限定? それともコンパイルし直せばどのOSでも使えるようにするのでしょうか?
34
+
35
+
36
+
37
+ もし Windows限定なら Windows APIを使うっていう手もありますよ。
38
+
39
+
40
+
41
+ 関数自体は [ファイル名変更、移動、削除、存在確認](https://programming.pc-note.net/c/file8.html)によると普通にrename関数で良いみたいです。
42
+
43
+
44
+
45
+ 移動先は単純に指定...って思いましたがよく読んだらいわゆる特殊フォルダですね。
46
+
47
+
48
+
49
+ 調べてみましたが、ちょっと厳しいみたいです。Windows APIを前提としているか、C++を前提としていますね。
50
+
51
+
52
+
53
+ 絶対**にC言語で、WinAPI ( Windows API ) を使わない方法**でっていうなら、
54
+
55
+
56
+
57
+ ```ここに言語を入力
58
+
59
+ 方法1:
60
+
61
+ JavaやC#, PythonのCUIタイプ(コンソールのやつ)でいったん取得して、その言語のソフトから本体であるC言語で作成したソフトを起動。っていう風にする。
62
+
63
+
64
+
65
+ Javaのソフト起動 -> Java側で特殊フォルダ取得 -> 特殊フォルダをコマンドライン引数として C言語で組んだソフトを起動
66
+
67
+
68
+
69
+ のような状態。
70
+
71
+ ```
72
+
73
+
74
+
75
+ ```ここに言語を入力
76
+
77
+ 方法2:
78
+
79
+ 方法1のDLL版。C#での特殊フォルダ取得系のやつをDLL化しておいてそれをC言語側で呼び出す。
80
+
81
+ ただし、こちらはかなり労力を必要とし、なおかつJavaとC言語の連携のような感じの場合はかなり組むのが大変になり、またC++の基礎も必要になることが多い。
82
+
83
+ ```
84
+
85
+
86
+
87
+ ```ここに言語を入力
88
+
89
+ 方法3:
90
+
91
+ Qt等のようなライブラリ( Widgetツールキットっていうらしいですが。 ) を使って行う。
92
+
93
+ ただし、C++の基礎が必要になってくることが多い。
94
+
95
+ ```
96
+
97
+
98
+
99
+ ```ここに言語を入力
100
+
101
+ 方法4:
102
+
103
+ コンソール入力かコマンドライン引数によって取得する。
104
+
105
+ 例えばソフト名を Mover.exe としたら
106
+
107
+
108
+
109
+ rem Mover 移動元 移動先
110
+
111
+ Mover C:\TestFiles C:\TestFiles\編集後
112
+
113
+
114
+
115
+ のような感じで。
116
+
117
+ ただし、こちらはユーザがPCの知識がないと厳しい。
118
+
119
+ パス自体わかっていない人が多いから。( 私もプログラミングやるまではわかっていませんでした。 )
120
+
121
+ ```
122
+
123
+ ```ここに言語を入力
124
+
125
+ 方法5:
126
+
127
+ 特殊フォルダじゃなくて普通の決め打ちできそうな位置にする。
128
+
129
+ 例えば Windowsフォルダじゃなくて Cドライブ直下とかね。
130
+
131
+ ただし、Cドライブ直下にはOSバージョンによっては作成したりできない場合がある。
132
+
133
+ ```
134
+
135
+ ```ここに言語を入力
136
+
137
+ 方法6:
138
+
139
+ 諦めてC++かJava, C# のような別の言語に切り替える
140
+
141
+ C++であれば拡張子を cppにしておけば
142
+
143
+ C言語とC++で一応両立は可能。
144
+
145
+ ただし、constの扱いとかが違ってきたりするが。
146
+
147
+ ```
148
+
149
+
150
+
151
+ ```ここに言語を入力
152
+
153
+ 方法7:
154
+
155
+ Windows APIを使う
156
+
157
+ ```
158
+
159
+
160
+
161
+ の方法7以外になるね。