1

ファイルのリストをダウンロードしようとしていますが、続行する方法がよくわかりません。トピックにあるように、私は DropNet を使用しています。これは、ファイルをダウンロードしようとしている手順です。

アプリケーション専用フォルダー内のすべてのファイルのリストを取得し、リストに文字列として保存します。

次に、次のことを試してください。

foreach (string file in files)
{
    _client.GetFileAsync("/" +file,
        (response) =>
        {
            using(FileStream fs = new FileStream(path +file +".gttmp", FileMode.Create))
            {
                for(int i = 0; i < response.RawBytes.Length; i++)
                {
                    fs.WriteByte(response.RawBytes[i]);
                }
                fs.Seek(0, SeekOrigin.Begin);
                for(int i = 0; i < response.RawBytes.Length; i++)
                {
                    if(response.RawBytes[i] != fs.ReadByte())
                    {
                        MessageBox.Show("Error writing data for " +file);
                        return;
                    }
                }
            }
        },
        (error) =>
        {
            MessageBox.Show("Could not download file " +file, "Error!");
        });
}

残念ながら、まったく機能していないようです。DropNet を使用していて、うまくいく何かを提案してくれる人はいますか?

4

2 に答える 2

1

ファイルを非同期にダウンロードするコードは正常に動作します。次の方法で試してみましたが、エラーは発生しませんでした。

client.GetFileAsync("/novemberrain.mp3",
                (response) =>
                {
                    using (FileStream fs = new FileStream(@"D:\novemberrain.mp3", FileMode.Create))
                    {
                        for (int i = 0; i < response.RawBytes.Length; i++)
                        {
                            fs.WriteByte(response.RawBytes[i]);
                        }
                    }
                    MessageBox.Show("file downloaded");
                },
                (error) =>
                {
                    MessageBox.Show("error downloading");
                });
于 2013-09-09T04:55:32.250 に答える
1

代わりに同期メソッドを使用しました:

foreach (string file in files)
{
    var fileBytes = _client.GetFile("/" + file);
    using (FileStream fs = new FileStream(path +file + ".gttmp", FileMode.Create))
    {
        for (int i = 0; i < fileBytes.Length; i++)
        {
            fs.WriteByte(fileBytes[i]);
        }
        fs.Seek(0, SeekOrigin.Begin);
        for (int i = 0; i < fileBytes.Length; i++)
        {
            if (fileBytes[i] != fs.ReadByte())
            {
                MessageBox.Show("Error writing data for " + file);
                break;
            }
        }
    }
}
于 2012-10-13T00:54:12.193 に答える