5

16進数に変換する予定のバイナリファイルを開こうとしていますが、FileStreamを介したファイルの読み取りで問題が発生しています。

private void button1_Click(object sender, EventArgs e)
{
    openFD.Title = "Insert a BIN file";
    openFD.InitialDirectory = "C:"; // Chooses the default location to open the file
    openFD.FileName = " "; // Iniitalizes the File name
    openFD.Filter = "Binary File|*.bin|Text File|*.txt"; // FIlters the types of files allowed to by chosen

    if (openFD.ShowDialog() != DialogResult.Cancel)
    {
        chosenFile = openFD.FileName;
        string directoryPath = Path.GetDirectoryName(chosenFile); // Returns the directory and the file name to reference the file
        string dirName = System.IO.Path.GetDirectoryName(openFD.FileName); // Returns the proper directory with which to refernce the file 
        richTextBox1.Text += dirName;
        richTextBox1.Text += chosenFile;
        FileStream InputBin = new FileStream(
            directoryPath, FileMode.Open, FileAccess.Read, FileShare.None);
    }
}

パスへのアクセスが拒否されたというエラーが表示されます。何かアイデアはありますか?

エラーが発生したので、別の問題が発生しました。バイナリファイルを読み取ることはできますが、16進ファイルとして表示したいので、何が間違っているのかわかりませんが、そうではありません。 HEXで出力を取得すると、Int値のようです...

if (openFD.ShowDialog() != DialogResult.Cancel)
        {

            chosenFile = openFD.FileName;
            string directoryPath = Path.GetDirectoryName(chosenFile); 
            string dirName = System.IO.Path.GetDirectoryName(openFD.FileName);
            using (FileStream stream = new FileStream(chosenFile, FileMode.Open, FileAccess.Read))
            {
                size = (int)stream.Length;
                data = new byte[size];
                stream.Read(data, 0, size);
            }

            while (printCount < size)
            {
                richTextBox1.Text += data[printCount];
                printCount++;
            }
4

2 に答える 2

10

あなたのコードは誤ってコメントされています

string directoryPath = Path.GetDirectoryName(chosenFile); // Returns the directory and the file name to reference the file

ファイル名ではなく、ディレクトリパスです。あなたが欲しい:

FileStream InputBin = new FileStream(chosenFile, FileMode.Open,FileAccess.Read, FileShare.None);

さらに、私があなたの意図に基づいて推測した場合、あなたはあなたの完全な機能を次のように更新する必要があります:

private void button1_Click(object sender, EventArgs e)
{
    openFD.Title = "Insert a BIN file";
    openFD.InitialDirectory = "C:"; // Chooses the default location to open the file
    openFD.FileName = " "; // Iniitalizes the File name
    openFD.Filter = "Binary File|*.bin|Text File|*.txt"; // FIlters the types of files allowed to by chosen

    if (openFD.ShowDialog() != DialogResult.Cancel)
    {
        chosenFile = openFD.FileName;

        richTextBox1.Text += chosenFile; //You may want to replace this with = unless you mean to append something that is already there.

        FileStream InputBin = new FileStream(chosenFile, FileMode.Open,FileAccess.Read, FileShare.None);
    }
}
于 2012-07-24T18:51:47.863 に答える
0

2番目の質問に答えるには:

パスへのアクセスが拒否されたというエラーが表示されます。何かアイデアはありますか?

Now that I have gotten that error taken care of I have ran into another Issue, I can read the binary file, but I want to display it as a Hex file, I'm not sure what I am doing wrong but I'm not getting an output in HEX, it seems to be Int values...

Modify to use string.Format:

    if (openFD.ShowDialog() != DialogResult.Cancel)
    {

        chosenFile = openFD.FileName;
        string directoryPath = Path.GetDirectoryName(chosenFile); 
        string dirName = System.IO.Path.GetDirectoryName(openFD.FileName);
        using (FileStream stream = new FileStream(chosenFile, FileMode.Open, FileAccess.Read))
        {
            size = (int)stream.Length;
            data = new byte[size];
            stream.Read(data, 0, size);
        }

        while (printCount < size)
        {
            richTextBox1.Text += string.Format( "{0:X} ", data[printCount];
            printCount++;
        }
    }

I've included an ideone example.

于 2012-07-27T16:42:27.150 に答える