私のソフトウェアを実行しているフィールドには、多くのWindows CE 5デバイスがあります。コンパクトなフレームワーク - ディレクトリの内容を読み取ることができません - winioerror
一部のディレクトリを解凍してサーバーに送信することが義務です。
約3台のデバイスで、ディレクトリを解凍しようとするとこのエラーが発生します。ジップ処理には、すべてのサブディレクトリを降りてファイルを追加する必要があります。
System.IO.IOException: IOException
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.Directory.InternalGetFileDirectoryNames(String fullPath, Boolean file)
at System.IO.Directory.InternalGetDirectories(String path, String searchPattern)
at System.IO.Directory.GetDirectories(String path, String searchPattern)
これはこのデバイスで毎回発生します。ランダムではありません。
開発用デバイスにディレクトリの内容をコピーし、同じディレクトリの内容で同じものを実行してもエラーは発生しません。私はインタラクティブにデバッグするための実際のデバイスを持っていません。
もちろん、このWinIOErrorは実際の原因を判断するうえであまり役に立ちません。ディレクトリの内容を読み込もうとしたときにCFが非常に失敗する原因について何かヒントを教えてもらえますか?
以下に示すように、存在しなくなったディレクトリのような一般的なものは、その効果の特定の例外によって処理されます。一般的なWinIOErrorではありません。
多くのありがとうございました。以下は
分解された機能である:
// System.IO.Directory
internal static string[] InternalGetFileDirectoryNames(string fullPath, bool file)
{
char c = fullPath[fullPath.Length - 1];
if (c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar || c == Path.VolumeSeparatorChar)
{
fullPath += '*';
}
string[] array = new string[10];
int num = 0;
HostNative.FIND_DATA fIND_DATA = new HostNative.FIND_DATA();
if (!Directory.Exists(Path.GetDirectoryName(fullPath)))
{
throw new DirectoryNotFoundException();
}
int handle;
int num2 = PAL.File_OpenAndReadDir(fullPath, out handle, fIND_DATA);
if (num2 != 0)
{
if (num2 == -2147479552 || num2 == -2147479545)
{
return new string[0];
}
__Error.WinIOError(num2, Path.GetDirectoryName(fullPath));
}
int num3 = 0;
do
{
bool flag;
if (file)
{
flag = (0 == (fIND_DATA.dwFileAttributes & 16));
}
else
{
flag = (0 != (fIND_DATA.dwFileAttributes & 16));
if (flag && (fIND_DATA.cFileName.Equals(".") || fIND_DATA.cFileName.Equals("..")))
{
flag = false;
}
}
if (flag)
{
num3++;
if (num == array.Length)
{
string[] array2 = new string[array.Length * 2];
Array.Copy(array, 0, array2, 0, num);
array = array2;
}
array[num++] = fIND_DATA.cFileName;
}
num2 = PAL.File_ReadDir(handle, fIND_DATA);
}
while (num2 == 0);
PAL.File_CloseDir(handle);
if (num2 != 0 && num2 != -2147479545)
{
__Error.WinIOError(num2, Path.GetDirectoryName(fullPath));
}
if (!file && num3 == 1 && (fIND_DATA.dwFileAttributes & 16) != 0)
{
return new string[]
{
fIND_DATA.cFileName
};
}
if (num == array.Length)
{
return array;
}
string[] array3 = new string[num];
Array.Copy(array, 0, array3, 0, num);
return array3;
}
私は考えていませんが、それほど悪くないとは思いません。私はエンジニアが問題なくラップトップにSDコンテンツ全体をコピーするようにしました(問題を再現できるように)。表面上は物理的な問題がないように見えます。それはすべて読むことができるからです。 – Nik
@ニック:しかし、SDカードIO(またはデバイスのフラッシュメモリ)に問題がありますか? SDカードの場合は、エクスプローラで右クリックして[プロパティ]を選択し、エラーチェックツールを使用してデスクトップ上の障害のあるカードをチェックします。そこにいて、その問題を見た。 –
はい - SDカードです。ありがとう - 私はエンジニアにそれをすることを試みます。しかし、SDカードはノートパソコンで完璧に読み込めますが、エラーは発生しませんが、デバイスでは読み込めない可能性はありますか? – Nik