- PR -

ファイルの情報を格納したバイト配列からファイルを生成・出力する方法について情報提供をお願いします

1
投票結果総投票数:5
Windows 5 100.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
雪苺息子
会議室デビュー日: 2005/02/03
投稿数: 2
投稿日時: 2005-02-03 15:49
ファイルの情報(データ部だけではなくファイル名等を含んだヘッダ部も)
を格納したバイト配列から、
ローカルフォルダにファイルを出力する方法を探しています。
ご存知の方は、ご教授お願いします。

.NET の API を調べてみたのですが、
有効な情報を得ることはできませんでした。

具体的に、以下を実装しようと思っています。
@ BASE64 でエンコーディングした文字列を、
  BASE64でデコードしてバイト配列を取得する
(System.Convert.FromBase64String を利用するつもりです。)

A @で取得したバイト配列を解析して、ヘッダ部とデータ部のバイト配列に分ける

B Aで取得した(ファイル名等を含む)ヘッダ部のバイト配列の情報と、
  データ部のバイト配列で、ファイルを出力する
  (テキストファイルのみとは限らないので、
FileStream.Write を利用するつもりです。)


尚、サンプルに使っているデータは以下です。
@ BASE64 でエンコーディングされたファイルの文字列
x0lGQRQAAAABAAAAAAAAACYAAAAYAAAAQgBBAFMARQA2ADQAZzCoMPMwszD8MMkwVTCMMF8w1TChMKQw6zAuAHQAeAB0AAAAgqCCoIKggqANCoKigqKCooKiDQqCpIKkgqSCpA0KgqaCpoKmgUI=

A 実際のファイル
ファイル名は、BASE64でエンコードされたファイル.txt
データは以下↓
ああああ
いいいい
うううう
えええ。
↑以上

以上です。
参考になるページがあれば、
そのURLだけでも構わないのです。
よろしくお願いします。
未記入
常連さん
会議室デビュー日: 2004/11/30
投稿数: 21
投稿日時: 2005-02-03 21:36
主題とは関係ないです。

某雑誌の宣伝ですか?
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-02-04 00:38
諸農です。

質問の内容にBase64文字を含めて投稿するのはあまり意味がないですよね。
投稿内容が読み辛かったので、次からは投稿内容に工夫をしていただけると
ありがたいです。

以下に私の独断で考えたサンプルのコードをアップしておきます。
コード内容を分析して、適当にカスタマイズしてください。

コード:
private void button1_Click(object sender, System.EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        byte[] b = Encoding.Default.GetBytes(openFileDialog1.FileName);
        string s = Convert.ToBase64String(b);
        b = Encoding.Default.GetBytes(string.Format("{0:d3}",s.Length));
        s = Convert.ToBase64String(b) + s;
        using (FileStream fs = new FileStream(openFileDialog1.FileName,FileMode.Open))
        {
            b = new byte[fs.Length];
            fs.Read(b,0,b.Length);
        }
        s += Convert.ToBase64String(b);
        label1.Text = s;
    }
}

private void button2_Click(object sender, System.EventArgs e)
{
    byte[] b = Convert.FromBase64String(label1.Text.Substring(0,4));
    int len = int.Parse(Encoding.Default.GetString(b));
    string s = label1.Text.Substring(4,len);
    string filename = Encoding.Default.GetString(Convert.FromBase64String(s));
    using (FileStream fs = new FileStream(filename,FileMode.Create))
    {
        s = label1.Text.Substring(len+4);
        b = Convert.FromBase64String(s);
        fs.Write(b,0,b.Length);
    }
}




_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-02-04 00:45
諸農です。

引用:

未記入さんの書き込み (2005-02-03 21:36) より:
主題とは関係ないです。

某雑誌の宣伝ですか?



気になる、気になる(^^;
技術系雑誌でしょうか?


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
雪苺息子
会議室デビュー日: 2005/02/03
投稿数: 2
投稿日時: 2005-02-04 13:54
>>Jubeiさん
ご回答ありがとうございます。

ご指摘頂いた点について、申し訳ありませんでした。
投稿する内容については以後気をつけていきます。

早速、提供して頂いたサンプルコードを解読&実行してみました。
確かにBASE64 → ファイルの作成
は上手くいきました。

ただ、私が使っていたデータのBASE64文字列だと、
やはり上手くいきません。
どうやらサンプルコードで作られたデータと違う点があるようです。

違う点は以下の2点です、
@ ファイル名の長さを示す情報が付加されていない
→ サンプルコードは、ファイル名の長さを格納したバイト配列を
  BASE64に変換して、先頭に付加しています。
  実際に私が使用しているデータは、
  先頭はおろか、どこにもファイル名の長さ入っていないようです。
  (全部BASE64やASCIIで、デコードしてもそれらしき情報は見当たらず、、、)

A ファイル名が JIS でエンコードされていない
→ サンプルコードは、以下の順でファイル名を取得しています。
   BASE64でデコード
   でデコードした文字列をJISでデコード

  ただ私が使用しているデータは、この手順でデコードしても、
  ファイル名が正しくデコードされません。
  (拡張子の .txt の部分は正しくデコードされる。
   多分、全角文字のデコードに失敗している様子。)

私が使用しているBASE64文字列は、
サンプルコードの手順で変換してないと考えられます。

ちなみに、私が使用しているデータについてですが、
InfoPathでファイルの添付を行い、
XML の要素値として表したデータです。

質問に質問を重ねて申し訳ありませんが、
InfoPathで、
ファイルのデータ→XML の要素値
の変換方法をご存知の方、
いらっしゃれば、ご教授願います。
(ソースコードレベルだとMSの開発者でないと分からないの思うので、
 仕様レベルの情報提供で十分です。)

以上です。
長々と書いてしまいましたが、
よろしくお願いします。

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-02-06 08:54
諸農です。

引用:

ただ、私が使っていたデータのBASE64文字列だと、
やはり上手くいきません。
どうやらサンプルコードで作られたデータと違う点があるようです。

//中略

私が使用しているBASE64文字列は、
サンプルコードの手順で変換してないと考えられます。



違うのは当たり前です。
私の独断仕様で文字列を作成しているのですから(^^;

引用:

ちなみに、私が使用しているデータについてですが、
InfoPathでファイルの添付を行い、
XML の要素値として表したデータです。

質問に質問を重ねて申し訳ありませんが、
InfoPathで、
ファイルのデータ→XML の要素値
の変換方法をご存知の方、



そういった大切な部分は一番最初に書くべきです。
私が書いてアップしたコードが無意味な結果になったので、悲しいです。

こちらでInfoPathのSDKをダウンロードすることが出来ます。
Microsoft Office InfoPath 2003 Software Development Kit (SDK) 日本語ドキュメント

私はまだ途中までしか読めていないですが、こちらの書籍も参考になるのでは。
実践ワークショップInfoPath+XMLによるOffice2003連携プログラミング

参考になればいいですね。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
1

スキルアップ/キャリアアップ(JOB@IT)