5

バイナリデータを元の形式「.PDF」に変換しようとしていますが、どちらの解決策も思いがけないものです。1つ目は小さなもので、PDFファイルを作成しますが、空のように見えます。2つ目もPDFファイルを作成しますが、開くことができません。エラーはどこにありますか?

最初のコード:

Conn.Open();
SqlCommand cmd = Conn.CreateCommand();
cmd.CommandText = "Select Artigo From Artigo WHERE (IDArtigo ='" + id + "')";
byte[] binaryData = (byte[])cmd.ExecuteScalar();

string s = Encoding.UTF8.GetString(binaryData);

File.WriteAllText("algo.pdf", s);

2番目のコード:

Conn.Open();
SqlCommand cmd = Conn.CreateCommand();
cmd.CommandText = "Select Artigo From Artigo WHERE (IDArtigo ='" + id + "')";
byte[] binaryData = (byte[])cmd.ExecuteScalar();

// Convert the binary input into Base64 UUEncoded output.
string base64String;
try
{
    base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length);
}
catch (System.ArgumentNullException)
{
    MessageBox.Show("Binary data array is null.");
    return;
}

cmd.CommandText = "Select Titulo From Artigo WHERE (IDArtigo ='" + id + "')";
string titulo = (string)cmd.ExecuteScalar();

// Write the UUEncoded version to the output file.
System.IO.StreamWriter outFile;
try
{
    outFile = new StreamWriter(titulo + ".pdf", false, System.Text.Encoding.ASCII);
    outFile.Write(base64String);
    outFile.Close();
}
catch (System.Exception exp)
{
    System.Console.WriteLine("{0}", exp.Message);
}
4

3 に答える 3

10

ファイルをテキストとして書き込んでいますが、生のバイトを書き込んでいる必要があります。.PDFファイルはテキストファイルではなくバイナリファイルであるため、実際には、最初のコードサンプルで間違ったデータを入力しています。

試す

    Conn.Open();
    SqlCommand cmd = Conn.CreateCommand();
    cmd.CommandText = "Select Artigo From Artigo WHERE (IDArtigo = @id)";
    cmd.Parameters.AddWithValue("@id", id);
    byte[] binaryData = (byte[])cmd.ExecuteScalar();
    File.WriteAllBytes(("algo.pdf", binaryData);
    string s = Encoding.UTF8.GetString(binaryData);

System.IO.File.WriteAllBytesについては、http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspxに記載されいます。

于 2013-01-01T15:00:27.240 に答える
3

元のデータ(binaryData)でFile.WriteAllBytesを試して、それを他のものに変換しようとしないでください

于 2013-01-01T14:58:25.053 に答える
0
string sql = "select Lsn_File from Lessons_tbl where Lsn_name = '"TextBox1.Text + "'";

        cmd = new SqlCommand(sql, dal.cn());

        dal.Open();
        SqlDataReader dr = cmd.ExecuteReader();

         dr.Read();
         if (dr.HasRows)
           {             
              byte[] lesson = (byte[])(dr[0]);
              spathfile = System.IO.Path.GetTempFileName();
              //move from soures to destination the extension until now is .temp
             System.IO.File.Move(spathfile, 
              System.IO.Path.ChangeExtension(spathfile,".pdf"));
                //make it real pdf file  extension .pdf
              spathfile = System.IO.Path.ChangeExtension(spathfile, ".pdf");
               System.IO.File.WriteAllBytes(spathfile, lesson );

               this.axAcroPDF1.LoadFile(spathfile);
         dal.close();
于 2014-04-12T01:18:04.857 に答える