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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректность названия файла 
:(
    Опции темы
Bogdan1024
  Дата 6.10.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Пользователю предлагается ввести путь к файлу, в который нужно кое-что сохранить. Файл создаётся. Как проверить корректность пути до создания объекта FileStream? Я проверяю наличие в нём некорректных символов (System.IO.Path.InvalidChars), но этого ж мало. Что ещё можно сделать?


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 ИМХО нужно просто попробовать создать файл.... Зачем выполнять ту проверку, которую потом сделает система...
PM MAIL ICQ   Вверх
Bogdan1024
Дата 6.10.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Файл может быть создан совсем не скоро, и если его не получится создать потом, то будет очень плохо, так что лучше проверить всё сразу.


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 6.10.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Длину пути надо бы проверить. И write-доступ к директории, например создав там какой-нибудь мелкий файлик и сразу удалив его.


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


Шустрый
*


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

Репутация: нет
Всего: 1



Зачем делать какие-то мелкие файлики, если первоначальная задача в том и состоит - создать файл. Помойму можно просто сделать обработку исключения и все:
Код

try
{
//Сохранить файл
}
catch
{
//Если сохранение невозможно
}

--------------------
Любое дело можно сделать тремя способами:1) правильно2) неправильно3) и так как это делают в армии
PM MAIL   Вверх
blast99
Дата 6.10.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сисадмин
*


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

Репутация: нет
Всего: 3



хм...  smile а у меня вот тут созрела такая мысль - можно попробовать проверить наличие папки "."(точка) в указанном пути.
Ведь в файловой системе есть еще директории "." и ".."  smile 
Правда это просто мысль, проверить сейчас не могу - нет студии рядом.  
--------------------
Зачастую, наши возможности ограничены лишь нашими желаниями. И ничто так не ограничивает желания, как заниженная оценка своих возможностей.
PM MAIL ICQ   Вверх
Bogdan1024
Дата 6.10.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Цитата

Длину пути надо бы проверить. И write-доступ к директории, например создав там какой-нибудь мелкий файлик и сразу удалив его.

Единственное что можно проверить в длинне пути это что она !=0
Ну неужели в .нет нет способа проверить можно ли создать файл или нет?
Цитата(Injener @ 6.10.2006,  18:33)
Зачем делать какие-то мелкие файлики, если первоначальная задача в том и состоит - создать файл. Помойму можно просто сделать обработку исключения и все:
Код

try
{
//Сохранить файл
}
catch
{
//Если сохранение невозможно
}

Нельзя, я ж сказал почему.

Это сообщение отредактировал(а) Bogdan1024 - 6.10.2006, 18:38


--------------------
user posted image
PM MAIL   Вверх
ivashkanet
Дата 6.10.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Bogdan1024 @  6.10.2006,  18:36 Найти цитируемый пост)
Ну неужели в .нет нет способа проверить можно ли создать файл или нет?

А какие критерии?
Просто корректоность имени/пути к фалу? Или же еще и наличие прав на создание файла в этой директории, наличие свободного места и т.п.?

Первый вопрос решается простым регулярным выражением (я думаю не будет большего труда его составить). А остальные лучше проверить через try/catch
PM MAIL WWW ICQ   Вверх
Дрон
Дата 6.10.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

Репутация: 24
Всего: 93



Цитата(Bogdan1024 @  6.10.2006,  19:36 Найти цитируемый пост)
Ну неужели в .нет нет способа проверить можно ли создать файл или нет?

Так а что же тебе всё-таки мешает собственно создать и сразу удалить файл?


--------------------
Да. Именно так.
PM   Вверх
blast99
Дата 6.10.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сисадмин
*


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

Репутация: нет
Всего: 3



ivashkanet,
я полога вопрос не только в кооректности ввода пути, но и в кооректности его существования...  smile Именно поэтому предлогают создавать мелкие файлы.
--------------------
Зачастую, наши возможности ограничены лишь нашими желаниями. И ничто так не ограничивает желания, как заниженная оценка своих возможностей.
PM MAIL ICQ   Вверх
Bogdan1024
Дата 6.10.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Точно, если полностью сформулировать что я хочу, то это будет звучать как "Проверить возможность создания файла не создавая файл. Вообще никакой.", сорри что морочу вам голову.
Какой толк создавать файл пускай и там же, где создастся нужный файл? Мне же нужно создать какой-то конкретный файл, а не какой-то в той же директории. А создать файл с правильным названием не круто потому что в этот момент другой экземпляр приложения может захотеть создать этот же файл и он обнаружит что его создать нельзя! Короче, создавать файлы чтобы что-то проверить - это неправильно.


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


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


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

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



Цитата(Bogdan1024 @  6.10.2006,  18:36 Найти цитируемый пост)
Единственное что можно проверить в длинне пути это что она !=0

Ещё она может быть слишком большой. Есть такая константа в винапи, MAX_PATH = 256.


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


Java-ненавистник :)
****


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

Репутация: 24
Всего: 93



Цитата(Bogdan1024 @  6.10.2006,  21:40 Найти цитируемый пост)
А создать файл с правильным названием не круто потому что в этот момент другой экземпляр приложения может захотеть создать этот же файл и он обнаружит что его создать нельзя! Короче, создавать файлы чтобы что-то проверить - это неправильно. 

Комрад, я в шоке  smile 

А что если в момент времени N ты убедился, что файл создать можно, а к моменту времени M, когда ты захочешь его создать условия изменятся?

Надо вообще-то понимать, что твоя задача в общем виде не решима

Ты можешь проверить, что в имени файла нет недопустимых символов (два метода Path.GetInvalid ... -- точно не помню).Ты можешь проверить длину пути (хотя MAX_PATH = 256 ИМХО уже неактуально smile ). Но это тебе ничего не даст, если у тебя нет права доступа к папке, или если такой папки не существует, или если путь вообще бредовый.

Единственный гарантированный способ -- обратиться к файловой системе и пусть она уже сама ответит. А обратиться к файловой системе -- создать пустой файл.

И кстати, а это разве нормальная ситуация, когда два приложения будут радостно перезаписывать один и тот же файл, считая, что всё в порядке?



--------------------
Да. Именно так.
PM   Вверх
Bogdan1024
Дата 7.10.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Цитата(Дрон @ 7.10.2006,  11:59)
Цитата(Bogdan1024 @  6.10.2006,  21:40 Найти цитируемый пост)
А создать файл с правильным названием не круто потому что в этот момент другой экземпляр приложения может захотеть создать этот же файл и он обнаружит что его создать нельзя! Короче, создавать файлы чтобы что-то проверить - это неправильно. 

Комрад, я в шоке  smile 

А что если в момент времени N ты убедился, что файл создать можно, а к моменту времени M, когда ты захочешь его создать условия изменятся?

Надо вообще-то понимать, что твоя задача в общем виде не решима

Ты можешь проверить, что в имени файла нет недопустимых символов (два метода Path.GetInvalid ... -- точно не помню).Ты можешь проверить длину пути (хотя MAX_PATH = 256 ИМХО уже неактуально smile ). Но это тебе ничего не даст, если у тебя нет права доступа к папке, или если такой папки не существует, или если путь вообще бредовый.

Единственный гарантированный способ -- обратиться к файловой системе и пусть она уже сама ответит. А обратиться к файловой системе -- создать пустой файл.

И кстати, а это разве нормальная ситуация, когда два приложения будут радостно перезаписывать один и тот же файл, считая, что всё в порядке?

Точно, ведь условия могут поменяться. Тогда действительно нерешима.   smile 
Большое спасибо что мне это показал smile


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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