..
ofstream file_wr;
AnsiString dirPath = ExtractFilePath(Application->ExeName) + this->user_name;
ForceDirectories(dirPath);
AnsiString fName = dirPath + "\\MyFile.txt";
file_wr.open(fName.c_str());
for (int i = 0; i < 10; i++)
{
AnsiString str = IntToStr(i + 1) + "\n";
file_wr.write( str.c_str(), str.Length() );
}
file_wr.close();
..
Программное создание каталога с файлом
C++Builder 6.0
Использование:
MS Windows 95 и старше.
Код:
Код:
Проблема:
Программа используется на различных компах, с разными ОС, разными политиками безопасности и т.д..
Приведенный код не на всех компах создает папку и помещает в нее файл(1 из 15 в среднем - пока). На некоторых компах он просто ничо не делает - и не ругается и не создает каталог с файлом.
Вопрос:
- С чем может быть связано.
- Как можно избежать такой ситуации.
Наиболее вероятная причина - размер строки dirPath больше значения MAXPATH для данной ОС или же в пути содержатся недопустимые символы. Или отсуствуют необходимые разрешения для юзера. Или хз :)
Выход достаточно простой - проверять что директория создана:
Код:
...
if(!ForceDirectories(dirPath)){
//Обрабатываем ошибку
}
if(!ForceDirectories(dirPath)){
//Обрабатываем ошибку
}
Цитата: kot_
..
Наиболее вероятная причина - размер строки dirPath больше значения MAXPATH для данной ОС или же в пути содержатся недопустимые символы.
..
Оба варианта - вряд ли, т.к. прогу пробывали кинуть на системный диск в корень. И недопустимым символам тоже неоткуда браться получается!!
Цитата: kot_
..
Или отсуствуют необходимые разрешения для юзера.
..
Вот это наиболее вероятный вариант, но:
1) Запись на диск разрешена - пробовали тупым созданием файла на диске(да и прогу как-то же на него скинули).
2) Компы находятся не в сети, но все-таки существует администратор. И политику прав я думаю он задает одинаковую на все компы. На этом компе не создается папка, а на рядом стоящем - создается :(
Да и какие права могут привести к такому поведению..
Цитата: kot_
..
Или хз :)
..
Тоже очень вероятный вариант ;)
Цитата: kot_
..
Выход достаточно простой - проверять что директория создана:
Код:
...
if(!ForceDirectories(dirPath)){
//Обрабатываем ошибку
}
if(!ForceDirectories(dirPath)){
//Обрабатываем ошибку
}
Так а чо делать-то, если папка не создана? Она имеет решающую роль в работе программы, а точнее в результате работы программы!
Попробовать вызвать команду повторно.