node.jsでファイルをコピーする

node.jsのバージョン8.5.0以降では、ファイルをコピーする以下の関数を使用できます。

fs.copyFileSync(src, dest[, flags])

fs.copyFileSync()は、srcをdestに同期コピーします。

srcはコピーするファイルのファイル名、
destはコピー先のファイル名です。

flagsはオプションの引数で、fs.constants.COPYFILE_EXCLを指定すると、コピー先にすでにファイルが存在する場合は例外を投げます。
未指定の場合は上書きします。

次のコードはファイルをコピーします。
コピー先にすでにファイルが存在する場合は上書きします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFileSync(src, dest);

次のコードは、ファイルをコピーします。
コピー先にすでにファイルが存在する場合はエラーにします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

try {
  fs.copyFileSync(src, dest, fs.constants.COPYFILE_EXCL);
  console.log('ファイルをコピーしました。');
} catch (error) {
  console.log(error);
}

fs.copyFile(src, dest[, flags], callback)

ファイルを非同期でコピーします。

srcはコピーするファイルのファイル名、
destはコピー先のファイル名です。

flagsはオプションの引数で、fs.constants.COPYFILE_EXCLを指定すると、コピー先にすでにファイルが存在する場合は例外を投げます。
未指定の場合は上書きします。

次のコードはファイルをコピーします。
コピー先にすでにファイルが存在する場合は上書きします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFile(src, dest, (err) => {
  if (err) {
    throw err;
  } else {
    console.log('ファイルをコピーしました。');
  }
});

次のコードは、ファイルをコピーします。
コピー先にすでにファイルが存在する場合はエラーにします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFile(src, dest, fs.constants.COPYFILE_EXCL, (err) => {
  if (err) {
    throw err;
  } else {
    console.log('ファイルをコピーしました。');
  }
});

Xamarin.MacでSystem.Drawingを使う

Xamarin.Macでプロジェクトのターゲットフレームワークに「Xamarin.Mac Modern」を選択していると、System.Drawingを使用できません。

System.Drawingの代わりに「ZKWeb.System.Drawing」を使用できます。

ZKWeb.System.Drawingは、クラス名はSystem.Drawingと同じですが、パッケージ名はSystem.DrawingCoreになります。

導入方法

プロジェクトのターゲットフレームワークは「Xamarin.Mac Modern」を選択します。

メニューから「プロジェクト」-「NuGetパッケージの追加」を選択し、「ZKWeb.System.Drawing」をインストールします。

使用例

サンプルアプリケーションでは、NSImageで楕円を描画し、Bitmapファイルに保存します。

var image = new NSImage(new CGSize(300, 100));
image.LockFocus();
var path = NSBezierPath.FromOvalInRect(new CGRect(new CGPoint(0, 0), new CGSize(300, 100)));
NSColor.Red.Set();
path.Fill();
image.UnlockFocus();

var bmprep = new NSBitmapImageRep(image.CGImage);
var data = bmprep.RepresentationUsingTypeProperties(NSBitmapImageFileType.Bmp);
var bitmap = new Bitmap(data.AsStream());

var folder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
var filename = System.IO.Path.Combine(folder, "test.bmp");
bitmap.Save(filename);

Xcodeのアップデートが待機中から進まないときの対策

App StoreでXcodeのアップデートが待機中になったまま進みません。
困った。

調べてみたところ、一度、Xcodeを削除すると良いらしいことがわかったので、 試しにXcodeを削除しました。
そうすると、新しいバージョンをインストールすることができました。

参考になれば。

PowerShellでスクリプトを実行するとセキュリティエラーになるときの対策

対策

次のコマンドを実行します。

> Set-ExecutionPolicy Unrestricted -Scope CurrentUser

または

> Set-ExecutionPolicy Bypass -Scope CurrentUser

解説

PowerShellでスクリプトを実行すると、次のようなエラーになることがあります。

> nodist -v
nodist : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files (x86)\Nodist\bin\nodist.ps1
を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170
) を参照してください。
発生場所 行:1 文字:1
+ nodist -v
+ ~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

このエラーが発生する理由は、PowerShellの実行ポリシーにあります。
既定の実行ポリシーは”Restricted”で、これは制限の厳しいポリシーです。

ポリシーには次のものがあります。

  • Restricted
  • AllSigned
  • RemoteSigned
  • Unrestricted
  • Bypass
  • Undefined

各ポリシーの詳細は「about_Execution_Policies」を御覧ください。

現在のポリシーは次のコマンドで確認できます。

> Get-ExecutionPolicy
Restricted

実行ポリシーを変更するには、次のコマンドを実行します。

> Set-ExecutionPolicy 設定するポリシー -Scope CurrentUser

例えば、ポリシーをBypassに変更するときは次のコマンドを実行します。

> Set-ExecutionPolicy Bypass -Scope CurrentUser