Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой-то глюк с, Extension или string 
V
    Опции темы
Retro
Дата 27.5.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Может я недопонял чего?
Вобщем код:

Код

            FileInfo f = new FileInfo(strPath + e.Label.ToString());
            string strExt = f.Extension;

В f абсолютный путь(все ОК), в Extension расширение в виде - .ххх(тоже все ОК), а вот в strExt, после выполнения, пусто, фигня какая-то.
Никаких ошибок и сбоев. Что происходит?

Добавлено через 9 минут и 6 секунд
Объявил string strExt глобально, все заработало. smile 
Что такое?
PM MAIL   Вверх
mr.DUDA
Дата 27.5.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Дебаггером проверяли ? Если строки 1 и 2 в проге идут одна за другой, не должно быть никакой мистики с пустым Extension.


--------------------
user posted image
PM MAIL WWW   Вверх
Retro
Дата 27.5.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(mr.DUDA @  27.5.2007,  14:47 Найти цитируемый пост)
Дебаггером проверяли ? Если строки 1 и 2 в проге идут одна за другой, не должно быть никакой мистики с пустым Extension. 

В том-то и дело, Extension не пустой, в нем конкретная строка - ".txt", а в strExt пусто. Брекпоинт после 
Код

string strExt = f.Extension;

PM MAIL   Вверх
mr.DUDA
Дата 27.5.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Код
using System;
using System.IO;

class Program
{
    static void Main()
    {
        FileInfo fi = new FileInfo(@"c:\1.txt");
        string strExt = fi.Extension;
    }
}

Мой код работает smile


--------------------
user posted image
PM MAIL WWW   Вверх
Retro
Дата 27.5.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(mr.DUDA @  27.5.2007,  16:55 Найти цитируемый пост)
Мой код работает

Да в Main() у меня тоже работает, а не работает в обработчике AfterLabelEdit.
PM MAIL   Вверх
mr.DUDA
Дата 28.5.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Мистика какая-то. Полный код обработчика в студию.


--------------------
user posted image
PM MAIL WWW   Вверх
Retro
Дата 28.5.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Когда объявляю string strExt вот так:
Код

        private void listView1_AfterLabelEdit(object sender,
                    System.Windows.Forms.LabelEditEventArgs e)
        {
            if (Directory.Exists(strPath + this.listView1.FocusedItem.Text.ToString()))
            {
                Directory.Move(strPath + this.listView1.FocusedItem.Text.ToString(),strPath + e.Label.ToString());
            }
            else
                if (File.Exists(strPath + this.listView1.FocusedItem.Text.ToString()))
                {
                    File.Move(strPath + this.listView1.FocusedItem.Text.ToString(), strPath + e.Label.ToString());
                }
            FileInfo f = new FileInfo(strPath + e.Label.ToString());
            string strExt = f.Extension;
        }//тут брекпоинт

то в строку нифига не записывается, хотя в f.Extension сидит расширение.
А когда объявляю глобально то все ОК.

Только что заметил, глюк проявляется только при Релизе, в Дебаге все нормально.
Ошибка в Релиз -
Код

strExt    The name 'strExt' does not exist in the current context    


PM MAIL   Вверх
Naum
Дата 28.5.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Retro @  28.5.2007,  15:11 Найти цитируемый пост)
        private void listView1_AfterLabelEdit(object sender,
                    System.Windows.Forms.LabelEditEventArgs e)
        {
            if (Directory.Exists(strPath + this.listView1.FocusedItem.Text.ToString()))
            {
                Directory.Move(strPath + this.listView1.FocusedItem.Text.ToString(),strPath + e.Label.ToString());
            }
            else
                if (File.Exists(strPath + this.listView1.FocusedItem.Text.ToString()))
                {
                    File.Move(strPath + this.listView1.FocusedItem.Text.ToString(), strPath + e.Label.ToString());
                }
            FileInfo f = new FileInfo(strPath + e.Label.ToString());
            string strExt = f.Extension;//может это и глюк, лучше ставить брекпоинт здесь.
        }//тут брекпоинт

Закрывающая скобка означает выход из текущего скопа. Поэтому иногда и могут быть траблы. Дебагер, скорее всего из-за оптимизаций, для Релиз конфигурации, понимает, что на закрывающей скобке, мы УЖЕ вышли из контекста.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Retro
Дата 28.5.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(Naum @  28.5.2007,  13:27 Найти цитируемый пост)
Дебагер, скорее всего из-за оптимизаций, для Релиз конфигурации, понимает, что на закрывающей скобке, мы УЖЕ вышли из контекста. 

Фигасе, точно, я добавил еще одну строку:
Код

            string strExt = f.Extension;
            string tmpStr = strExt;

и действительно, именно последняя строка пустая в Релизе. В Дебаге все ОК. А я сидел и пару часов пытался найти ошибку. smile

Добавлено через 3 минуты и 44 секунды
ИМХО, это баг. Ну или недоработка.
PM MAIL   Вверх
Naum
Дата 28.5.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Retro @  28.5.2007,  15:55 Найти цитируемый пост)
Ну или недоработка.

Как раз, наоборот, оптимизатор оптимизирует. Устраняет лишний расход не знаю чего (памяти, наверное). Если посмотреть IL кода для релиз конфигурации, то там про твою strExt вообще ни слова не будет. И правильно, зачем нам перед самой закрывающей скобкой инициализировать локальную переменную (забивать стек или кучу), если от нее ничего не зависит. Вообще все переменные, для которых выскакивает warning, типа переменная объявлена, но нигде не используется, компилятор при оптимизации выкидывает.  

З.Ы. И правильно делает.smile 



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Retro
Дата 28.5.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(Naum @  28.5.2007,  14:45 Найти цитируемый пост)
Как раз, наоборот, оптимизатор оптимизирует. Устраняет лишний расход не знаю чего (памяти, наверное). Если посмотреть IL кода для релиз конфигурации, то там про твою strExt вообще ни слова не будет. И правильно, зачем нам перед самой закрывающей скобкой инициализировать локальную переменную (забивать стек или кучу), если от нее ничего не зависит. Вообще все переменные, для которых выскакивает warning, типа переменная объявлена, но нигде не используется, компилятор при оптимизации выкидывает.  

Ну, если так смотреть то конечно. Только с моей точки зрения это был глюк, если разработчик хочет посмотреть на поведение некого метода, свойства и т.д. прежде чем ввести его в свой код. А я из-за этой оптимизации потерял время. Хоть бы указывалось где-то. smile 
PM MAIL   Вверх
Naum
Дата 28.5.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Retro @  28.5.2007,  17:44 Найти цитируемый пост)
если разработчик хочет посмотреть на поведение некого метода, свойства

Для этого и нужна конфигурация Debug.
И я все-таки не понимаю, зачем нужны такие переменные, которые нигде не используются? Никакой отладкой их существование не оправдывается.  smile 
Цитата(Retro @  28.5.2007,  17:44 Найти цитируемый пост)
Хоть бы указывалось где-то.

Да, мне вот тоже интересно, почему нигде не указывается, что нет хоткея для того, чтобы свернуть все проекты в солюшнексплорере. Я ведь потратил время, когда искал его. И еще нигде не написано, что 2 + "один" никогда не будет 3, а я пытался найти как это сделать.
Извини, за сарказм, но по-твоему в документации, кроме фитч, которые поддерживаются, нужно писать все фитчи, которые не поддерживаются?



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Retro
Дата 28.5.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(Naum @  28.5.2007,  16:08 Найти цитируемый пост)
И я все-таки не понимаю, зачем нужны такие переменные, которые нигде не используются?

Например чтобы понять как это работает и нужно ли ее(переменную) использовать или можно обойтись инными методами.

Цитата(Naum @  28.5.2007,  16:08 Найти цитируемый пост)
Извини, за сарказм, но по-твоему в документации, кроме фитч, которые поддерживаются, нужно писать все фитчи, которые не поддерживаются?

В принципе, мне лично, все равно, но чем больше упорядоченной документации тем лучше. Некоторые вещи приходиться буквально выцарапывать из интернета. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.