VisualStudio2013のセットアッププロジェクト
VS2013から
http://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d
installshieldでなくなったかと思ったけど復活したらしい。
binary read
普通にバッファサイズをおもいっきりとって一回読むのでもいいのかなー
public static byte[] GetData( this Stream input, int size ) { byte[] buffer = new byte[Math.Min( 1024, size )]; int totalSize = 0; using ( MemoryStream ms = new MemoryStream() ) { int readSize; while ( totalSize < size && ( ( readSize = input.Read( buffer, 0, GetBuffSize( buffer, size, totalSize ) ) ) > 0 ) ) { ms.Write( buffer, 0, readSize ); totalSize += readSize; } if ( totalSize != size ) { throw new IOException( "Cannot read the size specified." ); } return ms.ToArray(); } } private static int GetBuffSize( byte[] buffer, int size, int totalSize ) { return Math.Min( buffer.Length, size - totalSize ); }
終了処理をsizeでなくてreadsizeが0のみで判断すればBinaryのReadToEndになる
public static byte[] ReadToEnd( this Stream input ) { byte[] buffer = new byte[ 1024 ]; using ( MemoryStream ms = new MemoryStream() ) { int readSize; while ( ( readSize = input.Read( buffer, 0, buffer.Length ) ) > 0 ) { ms.Write( buffer, 0, readSize ); } return ms.ToArray(); } }
エンディアン変更
IPAddress.HostToNetworkOrderとかIPAddress.NetworkToHostOrderがあるのは知ってるけど
ネットワークで使うときでないときはなんか違う気がするんだ。
にしてもなんでsignedだけなんだ
public static ushort ToBigEndianUInt16( this byte[] source ) { return BitConverter.ToUInt16( GetCorrectEndian( source ), 0 ); } public static uint ToBigEndianUInt32( this byte[] source ) { return BitConverter.ToUInt32( GetCorrectEndian( source ), 0 ); } public static ulong ToBigEndianUInt64( this byte[] source ) { return BitConverter.ToUInt64( GetCorrectEndian( source ), 0 ); } private static byte[] GetCorrectEndian( byte[] source ) { byte[] buffer; if ( BitConverter.IsLittleEndian ) { buffer = source.Reverse().ToArray(); } else { buffer = source; } return buffer; }
Mp4ファイル解析
Mp4の再生時間とか知りたかったので
解析ツールは↓が便利
http://www.thinmultimedia.com/products/MP4Reader.html
ボックスについての情報
http://xhelmboyx.tripod.com/formats/mp4-layout.txt
Directory全部copy
File.Copyはあるのに!
Static Classも拡張メソッドできたらDirectoryに突っ込みたい
単純なCopyではなくて、複製?overwriteがtrueなら新しいファイルで上書き。こっちが古かったら上書きされる。
CopyDirectoriesだけなら一方向
そういえばWindows的にはFolderなんじゃないかと今更
/// <summary> /// ディレクトリの双方向レプリケーションを実施する。 /// </summary> /// <param name="directory1">複製対象のディレクトリ</param> /// <param name="directory2">複製対象のディレクトリ</param> /// <param name="overwrite">trueの場合、同一ファイルは更新日時を元に新しいファイルを正として上書きを行う。</param> public static void ReplicationDirectory( string directory1, string directory2, bool overwrite = true ) { CopyDirectories( directory1, directory2, true ); CopyDirectories( directory2, directory1, true ); } /// <summary> /// ディレクトリの複製を実施する。 /// </summary> /// <param name="sourceDirectory">複製元のディレクトリ</param> /// <param name="destDirectory">複製先のディレクトリ</param> /// <param name="overwrite">trueの場合、同一ファイルは更新日時を元に新しいファイルを正として上書きを行う。</param> public static void CopyDirectories( string sourceDirectory, string destDirectory, bool overwrite ) { var sourceDirectoryInfo = new DirectoryInfo( sourceDirectory ); if ( !sourceDirectoryInfo.Exists ) { return; } var destDirectoryInfo = new DirectoryInfo( destDirectory ); if ( !destDirectoryInfo.Exists ) { destDirectoryInfo.Create(); destDirectoryInfo.Attributes = sourceDirectoryInfo.Attributes; } CopyDirectoryFiles( sourceDirectoryInfo, destDirectoryInfo, overwrite ); foreach ( var sourceSubDirectoryInfo in sourceDirectoryInfo.GetDirectories() ) { CopyDirectories( sourceSubDirectoryInfo.FullName , Path.Combine( destDirectoryInfo.FullName, sourceSubDirectoryInfo.Name), overwrite ); } } private static void CopyDirectoryFiles( DirectoryInfo sourceDirectoryInfo, DirectoryInfo destDirectoryInfo, bool overwrite ) { foreach ( var sourceFileInfo in sourceDirectoryInfo.EnumerateFiles() ) { var destFileInfoEnum = destDirectoryInfo.EnumerateFiles( sourceFileInfo.Name ); if ( destFileInfoEnum.Count() != 0 && overwrite ) { var destFileInfo = destFileInfoEnum.First(); if ( destFileInfo.LastWriteTimeUtc < sourceFileInfo.LastWriteTimeUtc ) { File.Copy( sourceFileInfo.FullName, destFileInfo.FullName, true ); } else if ( sourceFileInfo.LastWriteTimeUtc < destFileInfo.LastWriteTimeUtc ) { File.Copy( destFileInfo.FullName, sourceFileInfo.FullName, true ); } } else if ( destFileInfoEnum.Count() == 0 ) { File.Copy( sourceFileInfo.FullName, Path.Combine( destDirectoryInfo.FullName, sourceFileInfo.Name ) ); } } }
SQL SERVER 全テーブル削除
外部キーもあわせて
begin try while(exists(select 1 from information_schema.table_constraints where constraint_type='foreign key')) begin declare @sql nvarchar(2000) select top 1 @sql=('alter table ' + table_schema + '.[' + table_name + '] drop constraint [' + constraint_name + ']') from information_schema.table_constraints where constraint_type = 'foreign key' exec (@sql) end while(exists(select 1 from sysobjects where xtype='u')) begin select @sql=('drop table ' + name) from sysobjects where xtype = 'u' exec (@sql) end end try begin catch print error_message() end catch;