初歩的な質問で恐縮です。
「Delphi6」というツールを友人にすすめられ使いはじめました。
そもそもプログラムの知識などないのですが(VBAを少しやった程度です)、
いきなりは無謀でしょうか? それはともかく、目的はハードディスクにある特定のファイルをMOなどにコピーするだけです。コピーするファイルは常に同じです。イメージとしてはアイコンをクリックするだけでコピーし、コピー終了後に「コピーが終了しました」みたいなメッセージを表示するだけです。
ドライブにディスクが装着されていないなどのエラー処理も必要でしょうが、
とりあえずコピーができればOKです。
Helpをみると「CopyFile」という関数を使えばよさそうなのですが、文法がわかりません。どなたかお分かりの方お教えください(初歩的な質問でごめんなさい)。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

始めまして、Doubleと申します。


DelphiはCなどに比べれば敷居は低い方なのでチャレンジしてみる価値は有ると思いますよ

それでは質問内容のCopyFileの使い方ですが、リファレンスには

CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL;

引数の説明としては
lpExistingFileName
コピー元のファイル名のキャラクター型ポインタ

lpNewFileName
コピー先のファイル名のキャラクター型ポインタ

bFailIfExists
コピー先に同名のファイルが存在していた場合の動作を指定
TRUE : 関数は異常終了し、コピーは行われない。
FALSE: 関数は正常終了し、上書きコピーされる。

の様に書かれています。
したがって以下のようにすれば実現出来ると思います。
(まあ、書き方には他にもいろいろ考えられますがとりあえず以下の方法で・・・(^^;)

function ExecFileCopy(FromF, ToF : String) : Boolean
begin
result := CopyFile(PChar(FromF),PChar(ToF),False);
end;


上記関数の呼び出し方は
if ExecFileCopy('C:\TEST.DAT', 'D:\TEST.DAT')
begin
//コピーが正常終了した時の処理
end else
begin
//コピーが異常終了した時の処理
end;

このようになります。

頑張ってください。

この回答への補足

早速の回答ありがとうございます。
上記を試してみたのですが、以下のエラーが出で動作しません。

function ExecFileCopy(FromF, ToF : String) : Booleanの部分で・・・
「文が必要な場所に`FUNCTION'があります」

if ExecFileCopy('C:\TEST.DAT', 'D:\TEST.DAT')の部分で・・・
「宣言が必要な場所に'IF'があります」

と出ます。入力ミスかと思い何度も見直したのですが、結果は同じでした。
お時間ありましたらお教えいただけますか?

補足日時:2001/11/13 11:30
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Delphiの基礎的なことも理解せず、いきなり目的だけ質問してすみません。
全体を学習しながら試させていただきます。ありがとうございました。

お礼日時:2001/11/13 13:46

Doubleです。


すみません、一部文法ミスしていましたね・・・(^^;
誤)if ExecFileCopy('C:\TEST.DAT', 'D:\TEST.DAT')
正)if ExecFileCopy('C:\TEST.DAT', 'D:\TEST.DAT') then
です。
あと、「文が必要な場所に`FUNCTION'があります」のエラーの方ですが。
関数の書き方に宣言が必要でして
Typeのpublic節に
「function ExecFileCopy(FromF, ToF : String) : Boolean;」
を追加し
関数名には
「function (type名).ExecFileCopy(FromF, ToF : String) : Boolean;」
を付けてください。
文法等の詳細はヘルプの「Object Pascal言語ガイド」を参照すると理解出来ると思います。
これからもいろいろ有ると思いますが、頑張ってくださいね!(^^)
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「古い圧縮ファイル」の確認方法

Dドライブのディスクのクリーンアップをしたいのですが、実行できるものが、「古い圧縮ファイル」の削除しかありません。

「古い圧縮ファイル」がどのプログラムかを確認する方法を教えてください。

また、圧縮されたファイルの名前は青くなるらしいのですが、見つかりません。どうしてでしょうか
圧縮ファイルは1G弱あります。

Aベストアンサー

http://www.atmarkit.co.jp/fwin2k/win2ktips/106cleanup/106cleanup.html

初期設定では、50日以上アクセスの無かったファイルに対して、圧縮が行われます。
当然、圧縮してからでないと、ファイル名は青色にはなりませんので、ディスク・クリーンアップでの候補段階では、黒色のままです。


尚、設定によっては青色表示にならない場合も有りますけど。

http://121ware.com/qasearch/1007/app/nec.jsp?005084

Q非常に初歩的な質問で恐縮なのですが、

非常に初歩的な質問で恐縮なのですが、
C#で、配列リストを機械的に複数個作ることはできないでしょうか。
具体的には、myArrayListという配列リストを100個作るとして、

System.Collections.ArrayList myArrayList1 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList2 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList3 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList4 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList5 = new System.Collections.ArrayList();
・・・
System.Collections.ArrayList myArrayList100 = new System.Collections.ArrayList();

をループなどを使うことによって書きたいのですが。

詳しい方がいらっしゃいましたら、アドバイス願います。

非常に初歩的な質問で恐縮なのですが、
C#で、配列リストを機械的に複数個作ることはできないでしょうか。
具体的には、myArrayListという配列リストを100個作るとして、

System.Collections.ArrayList myArrayList1 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList2 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList3 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList4 = new System.Collections.ArrayLi...続きを読む

Aベストアンサー

C#は知りませんが(^^;
配列リストの配列では拙いんでしょうか?

Qファイルの圧縮方法

AVIやMPGの画像ファイルを圧縮する方法を教えてください。900mb位のファイルをCD-Rに落とし込める700mbまで圧縮したいんですが。できれば、zipやlzhなどの後で解凍しなくてはいけないような圧縮方法ではなく、多少画像が荒くなってもファイルを単純に縮小させるような方法を教えていただけると有り難いのですが。。
因みに、TMPGEncを試してみたんですが、どうもうまくいかなくて。。ファイルサイズが元のファイルより逆に大きくなってしまうんです。
すいませんが、宜しくお願いします。

Aベストアンサー

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450 450 くらいでカット。
対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331
ではでは!

追伸
カンタンにならrmファイルに変更かなあ
でも画質は落ちますよ
ネット配信 ストリーミング形式でどぞ!
RealplusG2とかRealEncoderで変換
でもaviでもないしmpegでもないですけど、どお?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450...続きを読む

QC#の配列リストを機械的に複数作りたいです。非常に初歩的な質問で恐縮な

C#の配列リストを機械的に複数作りたいです。非常に初歩的な質問で恐縮なのですが、
C#で、配列リストを機械的に複数個作ることはできないでしょうか。
具体的には、myArrayListという配列リストを100個作るとして、

System.Collections.ArrayList myArrayList1 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList2 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList3 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList4 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList5 = new System.Collections.ArrayList();
・・・
System.Collections.ArrayList myArrayList100 = new System.Collections.ArrayList();

をループなどを使うことによって書きたいのですが。

詳しい方がいらっしゃいましたら、アドバイス願います。
同じ内容の質問を先ほど投稿してしまったのですが、タイトルが不適切だったため
直させていただきました。すいませんでした。

C#の配列リストを機械的に複数作りたいです。非常に初歩的な質問で恐縮なのですが、
C#で、配列リストを機械的に複数個作ることはできないでしょうか。
具体的には、myArrayListという配列リストを100個作るとして、

System.Collections.ArrayList myArrayList1 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList2 = new System.Collections.ArrayList();
System.Collections.ArrayList myArrayList3 = new System.Collections.ArrayList();
System.Collections.ArrayList myA...続きを読む

Aベストアンサー

ArrayListの配列で処理するとか。

ArrayList[] myArrayList = new ArrayList[100];

あるいは、ArrayListを格納するArrayListを作るとか。

ArrayList myArrayList = new ArrayList();
for(i = 0; i < 100; i ++)
{
myArrayList.Add(new ArrayList());
}

Qファイルの圧縮方法が解りません

窓の杜やベクター等に置かれている、フリーの圧縮、解凍ソフトをダウンロードしていますが、テキストファイルや、画像ファイルの圧縮方法が解りません。何方か教えて頂けませんか?

Aベストアンサー

ソフトの開発者のサイトで質問することをお奨めします。

ソフトごとに操作方法が異なりますので、使用しているソフト名すらない状態では誰も必要とする回答を出せません。

窓の杜やベクターでは開発者のサイトへのリンクがありますから、そこからアクセスできますよ。

Q【Delphi】 フォーム作成終了を判定できませんか?

メインFormのonCreateで、外部の設定ファイルを読んで、フォーム上に必要なオブジェクトを生成して、それらの準備が完了したらタイマーをスタートさせてゲーム開始、というシナリオを実現したいのですが、onCreateで生成命令を出したあと、準備が終わったというのはどうやって判定するのがいいでしょうか。

onCreateの一番最後でタイマーを作動させたところ、まだオブジェクトの準備が終わっていないようで、PCの処理速度によってはアクセス違反が起こってしまいました・・・。

onCreate内で生成しようとしたオブジェクトの実体があるかを逐一チェックして、無かったら作られるまでwaitをかけるという方法もあるかもしれませんが、音声と映像だけで200個近くあるので、一個ずつやるのは辛いです・・・(汗

Aベストアンサー

再びこんにちは。

動作を確認出来る最低限のソースを掲載された方がより詳しい方から「ここがまずい」ってレスが付き易いのでは、と申し上げたつもりだったのですが。。処理の流れだけでは。(^^;

それほど詳しい訳ではないのでハズしているかもしれませんが、オブジェクトの動的生成に失敗しているか、別のThreadで動かしているって事は無いですか?
であれば、どこに書いても発生する可能性がありますね。

ちなみにTCustomForm.OnCreateのヘルプによれば、下記の順でイベントが発生するようです。

 # フォームが作成されるとき,Visible プロパティが
 # True であればイベントが以下の順序で発生します。
 # 1. OnCreate
 # 2. OnShow
 # 3. OnActivate
 # 4. OnPaint

Qpsdファイルの圧縮方法

psdファイルの圧縮方法を教えてください。(基本的質問で恐縮ですが)
win98です。なお、ファイルは9MB程度ですが、圧縮したものを解凍する際、鮮明度が落ちずに元通りの画像で開けますでしょうか?

Aベストアンサー

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (デフォルトでは 1.2MB を上限として分割される。)
   (このサイズは +Lhaca で変更できる。)
 5. (4)のファイル全てを、容量を超えないようにメールに添付して送信
   する。
   (添付ファイル総数を本文に明記すること。)
 6. 受け取った側は、全ての添付ファイルを一箇所に集めて、バッチファ
   イルを実行する。
   (操作手順は、本文に明記すること。)
 7. 分割されたファイルが結合されるので、結合された圧縮ファイルを解
   凍する。
 8. 9MBのファイルが解凍されるので、作業する。


これでどうかな!?

※他の圧縮ソフトも分割機能が備わっていると思うが・・・

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (...続きを読む

QDELPHI 5でコンパイルできたソースがDELPHI 6でコンパイルできない

DELPHI 5(英語版)でコンパイルできたソースが、DELPHI 6(personal、無償版、日本語版)でコンパイルをしようとするとエラーが出てコンパイルできません。一般的に、5から6へ移行する際に注意することがありますでしょうか?あるいは、英語版と日本語版で異なるという可能性はありますでしょうか?

ソースの一部は以下の通りです。

**********
IMPLEMENTATION

USES Windows, Messages, Dialogs, FileCtrl;

CONST BUFLEN = 10240;
FindSortMax = 1024;
SHIFT_RECHTS = 1; (* Flags f・ Sondertasten *)
SHIFT_LINKS = 2; (* Flags f・ Sondertasten *)
CTRL = 4; (* Flags f・ Sondertasten *)
ALT = 8; (* Flags f・ Sondertasten *)
SCROLL = 16; (* Flags f・ Sondertasten *)
NUM_LOCK = 32; (* Flags f・ Sondertasten *)
CAPS_LOCK = 64; (* Flags f・ Sondertasten *)

TYPE BufAr = ARRAY [1..BUFLEN] OF BYTE;
TextFiles = RECORD
open : BOOLEAN;
Name : STRING[255];
buffer : ^BufAr;
END;
Zeichen = RECORD C : CHAR; A : BYTE; END;
Screen = ARRAY [1..25] OF ARRAY [1..80] OF Zeichen;
(* Entspricht der EGA/VGA Bildschirmstruktur *)

VAR TF : ARRAY[1..MAXFILES] OF TextFiles;
i : INTEGER;
VGA : Screen ABSOLUTE $0B800; (* VGA-Screen-Adresse *)
sommerzeit : BOOLEAN;
stmp : STRING;
FindSortNr : INTEGER;
FindSortP : INTEGER;
FindSortRecs: ARRAY[1..FindSortMax] OF ^TSearchRec;
ActTextForeGround, ActTextBackGround : BYTE;

**********

エラーは、「VGA : Screen ABSOLUTE $0B800; (* VGA-Screen-Adresse *)」の行にて、
 [エラー] Alib.pas(605): 変数名が必要です
と言うエラーが出ます。

他人からもらったソースの為、問題を簡略化して示すことができないのですが、もし上記の情報だけで何かしら問題点があるようでしたらお教えいただければ幸いです。

DELPHI 5(英語版)でコンパイルできたソースが、DELPHI 6(personal、無償版、日本語版)でコンパイルをしようとするとエラーが出てコンパイルできません。一般的に、5から6へ移行する際に注意することがありますでしょうか?あるいは、英語版と日本語版で異なるという可能性はありますでしょうか?

ソースの一部は以下の通りです。

**********
IMPLEMENTATION

USES Windows, Messages, Dialogs, FileCtrl;

CONST BUFLEN = 10240;
FindSortMax = 1024;
SHIFT_RECHTS ...続きを読む

Aベストアンサー

D5のソースをそのままD6では通らないものはあります。
VCLのファイルが分割、移動、追加されたようですね。
定義を見るとなんだかDOSレベルかドライバのような記述に見えますが,
USESに書いてあるD5のpasファイルに関連しそうな定義がどのような表記になっているのか探してはどうでしょう。

ABSOLUTE $0B800
を除いてコンパイルしてみてはどうでしょうか。
ABSOLUTE の記述が変わったのかもしれませんがコンパイルスイッチで
引っかかっているかもしれません。
またD6のHELPに何か載っているかもしれません。

私は何かあると困るので必ずVCLソース付きを購入していますが、このような場合はソースを確認しています。
また
http://www.torry.net/
でVCLソースを落としてD5とD6の違いを見てみてはいかがでしょう。
なにか判るかもしれません。

QNTFS圧縮したファイルを全部まとめて戻す方法

NTFS圧縮したファイルをプロパティからひとつひとつチェックをはずして戻すのではなく、圧縮されたファイルを全部まとめて元に戻す方法ってあるのでしょうか?

Aベストアンサー

圧縮を解除したいファイルを全て選択した状態で
→プロパティ→NTFS圧縮のチェックを外す→OK

それらのファイルがフォルダに入っているなら
フォルダのプロパティからやってもいい。
(サブフォルダにも適用するか尋ねられるからOKにする)

Qdelphiで配列を、コピーするには。

delphiで配列をコピーするには、どうしたらいいのでしょうか?

Betr_Hairetu := Moto_Hairetu ;

としたいのですが。

Betr_Hairetu := Copy(Moto_Hairetu, 0 ,Length( Moto_Hairetu ) );

では、ダメでした。

ループで、一から入れ直せばいいのですが、かっこわるいなー・・・。
なにか、簡単な関数があるとは思うのですが、探すことができませんでした。
よろしくお願いします。

Aベストアンサー

本来のパスカルでは、配列と文字列(ストリング)は異質であって
相容れるものではありません。
DelphiのCopy関数は、文字列をコピーするものであって
配列をコピーするものではありません。
ちなみに、Copy関数の第2引数に0が指定されることはありません
Delphiの文字列のインデクスは1から始まります

ところが、Delphiのあるバージョンから、array[] of char と
string が 同じように扱われるようになったので、やや混乱すると思います。

ですが、Delphiでは、文字配列かstringかをはっきり区別して使用するほうが
無難です。

質問では、配列としか書かれていないので、整数の配列か、はたまたレコードの配列か
わかりませんが、

var
ar1, ar2 :array[0..5] of integer;
begin
for i := 0 to 5 do ar1[i] := i * 11;

Move(ar1,ar2, SizeOf(ar1));
end

と Move関数が使えます


また、OSがWindowsで、Win32を使えるなら

CopyMemory関数を使う方法もあります。

本来のパスカルでは、配列と文字列(ストリング)は異質であって
相容れるものではありません。
DelphiのCopy関数は、文字列をコピーするものであって
配列をコピーするものではありません。
ちなみに、Copy関数の第2引数に0が指定されることはありません
Delphiの文字列のインデクスは1から始まります

ところが、Delphiのあるバージョンから、array[] of char と
string が 同じように扱われるようになったので、やや混乱すると思います。

ですが、Delphiでは、文字配...続きを読む


人気Q&Aランキング