Сегодня я столкнулся с очень странной ошибкой C#.Strange C# Directory.GetFiles error
Я написал небольшой метод, который должен искать и обрабатывать весь Xnb-файл XNA в любой заданной директории. На большинстве компьютеров он работал отлично - ожидайте некоторых случаев (два парня с проблемой XP сообщили).
я только был в состоянии воспроизвести эту ошибку на win7 один раз (и, конечно, за пределами VC#)
Вот метод:
files = Directory.GetFiles("Content\\Textures\\Houses\\Roof");
for (int i = 0; i < files.Length; i++)
{
string path = files[i].Substring(BasicUtils.FindsubString(files[i], "Textures")).Replace(".xnb", "");
roofTextures.Add(DataCenter.AddTexture(DataCenter.Content.Load<Texture2D>(path)));
}
Этот метод получить все файлы в данный каталог, в данном случае, «Содержимое \ Текстуры \ Дома \ Крыша». И вот пришла ошибка: в этом каталоге есть три файла (все с расширением .xnb). На моем компьютере с win7 (и еще четыре компьютера другого парня с win7) эта работа, как и должно быть.
Но, когда кто-то с победой XP попытается запустить этот метод, ОС вернет 4 файла - и три действительно выходящих файла и один файл, открытый в последний раз с помощью OpenFileDialog (даже если файл в полностью другой директории, каталог.Getfiles вернет его, как он есть, в этом каталоге).
И когда я хочу его открыть, метод не найдет файл и не выдаст исключение.
Мне удалось преодолеть эту ошибку, проверив, имеет ли данный задний файл расширение .XNB, но эта ошибка действительно заставляет меня задуматься.
Любая идея, где я допустил ошибку?
Открытый файл в области winform, в то время как поиск и открытие файла в другой DLL, совершенно другой класс, в частном, неприемлемом методе - они не должны даже общаться каким-либо образом! Я не знаю, как, черт возьми, я вернул это имя файла.
Edit:
Я думаю, что я не сделал мою проблему ясно (извините за это :).
Итак, проблема в методе: когда я использую Directory.GetFiles (...), он возвращает три файла, которые действительно находятся в каталоге (три файла .xnb). Но для некоторых пользователей (с использованием Windows XP) этот метод возвращает одно расширение .sbm (тип файла, используемого моей программой), который ISNT внутри каталога. Я довольно долго искал, пока не узнал: эта проблема возникает только при использовании Openfiledialog - когда они это делают, каталог.GetFiles (...) вернет ранее открытый файл, как он есть, но phyisically это не так. Я смог решить эту проблему, но все же не могу понять, ПОЧЕМУ это может случиться. Я прошел через базу данных MSDN, но я ничего не узнал об этой ошибке. Я попытался воссоздать ошибку внутри VS, надеясь, что это даст ключ, но я не мог этого сделать. Однажды проблема появилась и для меня (из win7), но поскольку она была вне VS VS, я не смог отлаживать. В настоящее время только два пользователя, получивших XP XP, в то время как его работа отлично подходит для всех, кто использует win7.
О, и я дважды проверял - в этом каталоге нет скрытого файла (особенно ранее открытого файла). Только три желаемых файла внутри.)
Edit 2:
Вот ссылка для этой проблемы, а также шаги по созданию проблемы:
https://www.dropbox.com/s/4uv1hbvzkhpwprw/House%20Creator%20V2%20With%20error.zip
Запуск Housecreator.exe Нажмите на кнопку "Загрузить". Выберите «Пригородный дом 1.sbm»
При его загрузке нажмите кнопку «3D-рендеринг».
И это шаг, на котором должна появиться ошибка. Программа будет искать файл «Suburb house 1.sbm» в (Content) \ Textures \ Houses \ OuterWall (иногда в основном для пользователей xp, но иногда это происходит и для меня, но только снаружи от Visual Studio) ,
XNA framework 3.1 потребуется, а также .NET 3.5, чтобы попробовать программу. И ошибка появляется только в том случае, если пользователь использует опцию «load».
Редактировать 3: Я получил ошибку три раза подряд. Внутри данного каталога не было добавлено дополнительного файла. И теперь его работа снова, без каких-либо заметных изменений. O.o
У меня исходит из идей, почему это происходит.
Редакция 4:
Я сдал. Я уверен, что я что-то ошибаюсь (я не думаю, что это может быть эта огромная ошибка, и никто еще не заметил), но не могу понять, где она. Я фильтрую файлы, и это должно работать. Спасибо всем за помощь! :)
Первый шаг - сузить, если ошибка исходит из Directory.GetFiles или из вашего собственного кода. Скорее всего, вы добавили что-то в 'roofTextures' и не понимаете этого. –
Какое исключение и где? Как эта информация по финансированию может отсутствовать? Неудивительно, что вы не можете отлаживать! – banging
Какая шутка пыталась сказать, можно было сказать: «Куда исключено исключение?» ... и можно было сказать без оскорблений. – hometoast