1

私はプロパティで非常に奇妙な問題に直面しFileInfoていLengthます。クライアントにファイル (主に画像) を送信するための呼び出しに応答するサーバーを作成しています。実際のファイルを送信する前に、ファイル サイズをクライアントに送信したいと考えています。ファイルサイズを見つけるために使用FileInfoしていますが、奇妙なことに、毎回正しいサイズが得られません。別の言い方をすれば、同じファイルに対して異なるサイズを受け取ります。実際のサイズよりも小さい場合もあれば、正しい場合もあります (ただし、実際のサイズを超えることはありません)。問題をさらに奇妙にするのは、同じコードを新しいプロジェクト (サーバーではなく、単なるテスト プロジェクト) にコピーすると、問題なく動作し、正しい答えが得られることです。サーバーはスレッドを使用するため、複数のクライアントが接続できます (テスト プロジェクトは接続できません) が、これはFileInfo. これが私のコードです:

String fullFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + imageName;
FileInfo file1 = new FileInfo(fullFilePath);
Console.Writeline("File Size: {0}", file1.Length);

非常に基本的なコード!私の画像は 4 から 10 キロバイトの範囲で小さいです。私は何か間違ったことをしていますか?助言がありますか?

4

1 に答える 1

2

やっぱり取れました!問題はクラスにあるのではなくFileInfo、クライアント サーバー通信の概念の問題でした。画像はもともとサーバー上になく、別のクライアントからのものです。何が起こっていたかというと、クライアントがサーバーに画像を送信していて、この画像を取得する要求が別のクライアントからサーバーに届いていましたが、サーバーが実際にディスクへの画像の保存を完了する前でした。したがって、ファイルの合計バイト数ではなく、現在保存されているバイト数をFileInfo取得していました。Length

解決策は次のとおりです。ファイルがサーバーに送信されたとき、このファイルが他のクライアントによってダウンロードされる準備ができるようになる前に、サーバーが保存プロセスを完了するまでしばらく (たとえば 1 秒) 待ちます。

于 2012-05-18T16:23:25.087 に答える