node.jsでファイルの情報を取得する

ファイルの情報を取得するには、次の関数を使用します。

fs.statSync(path)

fs.statSync(path)は、引数にファイルのパスを受け取り、fs.Statsオブジェクトを返します。

const fs = require('fs');

const path = 'sample.txt';
const stats = fs.statSync(path);

// ファイルサイズ
console.log(stats.size);
// 最終アクセス時刻
console.log(stats.atime);
// 最終修正時刻
console.log(stats.mtime);
// 最終状態変更時刻
console.log(stats.ctime);

fs.stat(path, callback)

fs.stat(path, callback)は、引数にファイルのパスとコールバック関数を受け取ります。

コールバック関数は引数にErrorオブジェクトとfs.Statsオブジェクトを受け取る関数です。

const fs = require('fs');

const path = 'sample.txt';

fs.stat(path, (err, stats) => {
  if (err) {
    throw err;
  }
  // ファイルサイズ
  console.log(stats.size);
  // 最終アクセス時刻
  console.log(stats.atime);
  // 最終修正時刻
  console.log(stats.mtime);
  // 最終状態変更時刻
  console.log(stats.ctime);
});

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を削除しました。
そうすると、新しいバージョンをインストールすることができました。

参考になれば。