Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Корректность названия файла


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

Автор: Sartorius 6.10.2006, 16:30
 ИМХО нужно просто попробовать создать файл.... Зачем выполнять ту проверку, которую потом сделает система...

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

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

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

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

Автор: blast99 6.10.2006, 18:36
хм...  smile а у меня вот тут созрела такая мысль - можно попробовать проверить наличие папки "."(точка) в указанном пути.
Ведь в файловой системе есть еще директории "." и ".."  smile 
Правда это просто мысль, проверить сейчас не могу - нет студии рядом.  

Автор: Bogdan1024 6.10.2006, 18:36
Цитата

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

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

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

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

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

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

Первый вопрос решается простым регулярным выражением (я думаю не будет большего труда его составить). А остальные лучше проверить через try/catch

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

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

Автор: blast99 6.10.2006, 19:36
ivashkanet,
я полога вопрос не только в кооректности ввода пути, но и в кооректности его существования...  smile Именно поэтому предлогают создавать мелкие файлы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)