Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
#1

Почему БЕЗОШИБОЧНО создаётся файл, а его не видно? - C++

18.04.2011, 22:58. Просмотров 1778. Ответов 30
Метки нет (Все метки)

Друзья! Вот простой код, создаётся файл, а имя для него генерит функция
tmpnam; Но файла не видно! Ни после выполнения программы ни в процессе (перед закрытием). никак, все каталоги перерыл. Чё-то я не понимаю, чё за файл такой? И где его можно применить?

Что касается временных файлов, то есть функция tmpfile, она создаёт ВРЕМЕННЫЕ файлы. Что это значит, я не вникаю, но , если файл созданный с помощью tmpfile будет вести себя страно, будет невидимым, я не удивлюсь.

...tmpnam же по сути просто-напросто генерит строку символов, не совпадающую ни с одним из названием файлов, которые есть в текущем каталоге. Всё! И не больше.
Так нет же, tmpnam(tmpstr) возвращает указатель, применяя который как название файла, файл невидим. Чё-то ребята я не пойму, это так задумано создателями?



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
  FILE *fp;
  char tmpstr[L_tmpnam];
  // Открываем файл
  fp = fopen(tmpnam(tmpstr), "w");
  if(fp == NULL)
  {
    cout << "Невозможно открыть файл: " << ferror(fp) <<  "\n";
    return 1;
  }
 
  // Закрываем файл
 
  getchar ();
  fclose(fp);
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2011, 22:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему БЕЗОШИБОЧНО создаётся файл, а его не видно? (C++):

Не создаётся объект string на ровном месте! Почему? - C++
Ребята, чё-то я не пойму: #include &lt;string&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main () { char...

Почему при инициализации строки, сначала создаётся пустой объект? - C++
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

Почему два раза создаётся объект с ОДНИМ И ТЕМ ЖЕ ИМЕНЕМ? - C++
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; class arr{ public: arr(){ cout &lt;&lt; &quot;Вызов конструктора по...

Не создаётся exe файл - C++
Вот код, создаю проекта в визуал студио, компилирую, выдаёт ошибку что не найдет exe #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Не создаётся объектный файл - C++
Необходимо создать объектный файл вот код: #include &lt;stdio.h&gt; //#include &lt;conio.h&gt; extern &quot;C&quot; void asmproc(char ch, unsigned...

почему глобальную переменную не видно, хотя она объяылена? - C++
#include &lt;vector&gt; using namespace std; int min= 1; int main(){ min= 90; return 0; }

30
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
19.04.2011, 14:45  [ТС] #16
Всё-ж таки, ребята, я чуть-чуть разобрался.

Короче, с tmpnam всё ясно более или менее. Еле-еле в MSND нашёл нужные строки:
"This program uses tmpnam to create a unique filename in the
// current working directory"
То есть tmpnam создаёт имена файла, уникальные в ТЕКУЩЕЙ рабочей директории.
В принципе всё, но если бы кто разъяснил, был бы благодарен на счёт _tempnam

Код взят по ссылке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// current working directory, then uses _tempnam to create 
// a unique filename with a prefix of stq. 
 
#include <stdio.h>
#include <stdlib.h>
 
int main( void )
{   
   char* name1 = NULL;
   char* name2 = NULL;
 
   // Create a temporary filename for the current working directory: 
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
 
   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.   
 
   if( ( name2 = _tempnam( "c:\\tmp", "stq" ) ) != NULL )
      printf( "%s is safe to use as a temporary file.\n", name2 ); 
   else
      printf( "Cannot create a unique filename\n" );
 
   // When name2 is no longer needed :   
   if(name2)
     free(name2);
     
}
Ну тут на самом деле всё понятно, кроме одного, почему
_tempnam

рассматривает директорию c\\temp, а имя файла выдаёт какое-то левое причём результат
этот предсказуемый, вот он там же напечатан:

C:\DOCUME~1\user\LOCALS~1\Temp\2\stq2
А по идее должно быть что-то типа C\tmp\<std_конец_имени_файла>

Добавлено через 1 час 19 минут
Хотя нет, ребята, они написали в MSND ложь. Вот эту ложь:
// This program uses tmpnam to create a unique filename in the
// current working directory

Проведём эксперимент. Накропаем код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <stdlib.h>
 
int main( void )
{   
   char* name1 = NULL;
   char* name2 = NULL;
 
   // Create a temporary filename for the current working directory: 
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   getchar ();
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
 
 
     
   getchar ();
}
Ну то есть попробуем использовать tmpnam много раз. Запустим код и увидим, к примеру такое:

PureBasic
1
2
3
4
5
6
7
8
9
\s36s. is safe to use as a temporary file.
\s36s.1 is safe to use as a temporary file.
\s36s.2 is safe to use as a temporary file.
\s36s.3 is safe to use as a temporary file.
\s36s.4 is safe to use as a temporary file.
\s36s.5 is safe to use as a temporary file.
\s36s.6 is safe to use as a temporary file.
\s36s.7 is safe to use as a temporary file.
\s36s.8 is safe to use as a temporary file.
OK, теперь залезем в текущюю папку файл и создадим там файл s36s.9 После этого жмём на Enter и видим:
И увидим:

\s36s.9 is safe to use as a temporary file.
...
...
...

Видите? Имя файла s36s.9 сгенерировалось, хотя файл s36s.9 в текущей директории есть!
И вот так много-много раз повторим и всякий раз будет генериться имя ИМЕЮЩЕГОСЯ уже файла

А вот если мы будем создавать файл в директории диска, тогда, всё будет ОК и имя s36s.9 создаваться не будет, а будут создаваться имена:
Bash
1
2
\s36s.a is safe to use as a temporary file.
\s36s.b is safe to use as a temporary file.
Вывод: а безо всяких выводов. От чего начал к тому и пришёл, только в правильности официальных доков усомнился и всё.
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
19.04.2011, 16:47 #17
man tmpnam
The tmpnam() function returns a pointer to a file name, in the P_tmpdir
directory, which did not reference an existing file at some indeterminate
point in the past. P_tmpdir is defined in the include file <stdio.h>.
If the argument str is non-NULL, the file name is copied to the buffer it
references. Otherwise, the file name is copied to a static buffer. In
either case, tmpnam() returns a pointer to the file name.
При чём, если в никсах всё просто и понятно
Код
$ grep P_tmpdir /usr/include/stdio.h
#define P_tmpdir        "/tmp"
в мелкомягком stdio.h чёрт ногу сломит
Код
#define _P_tmpdir   "/"
#define _wP_tmpdir  L"/"
#define _P_tmpdir   "\\"
#define _wP_tmpdir  L"\\"
/* L_tmpnam = length of string _P_tmpdir
 *            + 1 if _P_tmpdir does not end in "/" or "\", else 0
 * L_tmpnam_s = length of string _P_tmpdir
 *            + 1 if _P_tmpdir does not end in "/" or "\", else 0
#define L_tmpnam   (sizeof(_P_tmpdir) + 12)
#define L_tmpnam_s (sizeof(_P_tmpdir) + 16)
#define P_tmpdir  _P_tmpdir
я так и не понял - это в корне текущего диска, или в папке, из которой программа запущена? Скорее второе, наверное...
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.04.2011, 17:14 #18
Цитата Сообщение от easybudda Посмотреть сообщение
я так и не понял - это в корне текущего диска, или в папке, из которой программа запущена?
Все таки в корне диска, на котором находится программа.
Цитата Сообщение от kravam Посмотреть сообщение
И вот так много-много раз повторим и всякий раз будет генериться имя ИМЕЮЩЕГОСЯ уже файла
Вы в корне пробовали создавать файл с таким же именем? Потому что у меня все в порядке - я создал файл с именем "sbs.2" и при генерации двойка была пропущена, следующий вызов tmpnam выдал сразу "sbs.3". Файл надо создавать не в каталоге с программой, а в корне диска, это важно.
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
19.04.2011, 17:25  [ТС] #19
Цитата Сообщение от fasked Посмотреть сообщение
Все таки в корне диска, на котором находится программа.

Вы в корне пробовали создавать файл с таким же именем? Потому что у меня все в порядке - я создал файл с именем "sbs.2" и при генерации двойка была пропущена, следующий вызов tmpnam выдал сразу "sbs.3". Файл надо создавать не в каталоге с программой, а в корне диска, это важно.
Да, пробовал,
Цитата Сообщение от kravam Посмотреть сообщение
А вот если мы будем создавать файл в директории диска, тогда, всё будет ОК
всё получается, просто это неудобно, ну ладно захотели разработчики сделать рабочей коревую директорию диска, это их дела. Ну хоть бы сделали tempnam дабы можно было САМОМУ указывать директорию! Нет, она работает, но натурально не разобраться вот так с ходу, она вроде как проверяет указанную директорию и имя создаёт, но имя вообще какое-то левое в какой-то хитрой папке
C:\DOCUME~1\user\LOCALS~1\Temp\...
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.04.2011, 17:32 #20
Цитата Сообщение от kravam Посмотреть сообщение
Ну хоть бы сделали tempnam дабы можно было САМОМУ указывать директорию!
Так а это что такое? _tempnam
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
19.04.2011, 17:34 #21
Цитата Сообщение от kravam Посмотреть сообщение
Ну хоть бы сделали tempnam дабы можно было САМОМУ указывать директорию!
В каком смысле "хоть бы сделали"? В том же мелкомягком stdio.h:
Код
_CRT_NONSTDC_DEPRECATE(_tempnam) _CRTIMP char * __cdecl tempnam(__in_z_opt const
 char * _Directory, __in_z_opt const char * _FilePrefix);
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
19.04.2011, 17:58  [ТС] #22
fasked,
easybudda,
А мне казалось, я убедил вас, что написать можно всё, что угодно.. Можно написать что рабочей директория считается текущая, а рабочей будет корневой каталог диска... Ну что ж ещё раз, из MSND


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main( void )
{   
  
   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.   
 
   if( ( name2 = _tempnam( "c:\\tmp", "stq" ) ) != NULL )
      printf( "%s is safe to use as a temporary file.\n", name2 ); 
   else
      printf( "Cannot create a unique filename\n" );
 
   // When name2 is no longer needed :   
   if(name2)
     free(name2);
     
}
Что всё это значит?
Создаёт временное имя файла во временной же директории... ТО есть я ЯВНО указываю директорию,
а при создании имени файла берётся за основу ЛЕВАЯ директория, я в неё в жизни не лазил
и щас не хочу, я хочу работать в ТЕКУЩЕЙ, а они мне подсовывают непонятно что.
C:\DOCUME~1\user\LOCALS~1\Temp\2\stq2 is safe to use as a temporary file.

...Нет, ну смешно же. Мы проверяем на наличие имён файлы директории X (в данном случае c:\\tmp
), а создаём такой файл для диретории Y
Вот и проверяли бы Y на наличие таких файлов.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.04.2011, 18:32 #23
Цитата Сообщение от kravam Посмотреть сообщение
Создаёт временное имя файла во временной же директории... ТО есть я ЯВНО указываю директорию,
а при создании имени файла берётся за основу ЛЕВАЯ директория, я в неё в жизни не лазил
Я могу Вас понять, но читать лучше само описание, а не комментарии к коду (это еще раз доказывает, что излишние комментарии зло). На этой же самой странице описаны параметры функций:
Parameters

prefix
The string that will be pre-pended to names returned by _tempnam.

dir
The path used in the file name if there is no TMP environment variable, or if TMP is not a valid directory.

str
Pointer that will hold the generated name and will be identical to the name returned by the function. This is a convenient way to save the generated name.
dir - Путь используется в имени файла, если не существует переменной среды окружения TMP или если TMP не валидная директория.
С этим понятно? То есть, Вы можете стереть все переменные среды окружения и радоваться
Ниже (в этой же статье написано еще раз):
_tempnam will generate a unique file name for a directory chosen by the following rules:

If the TMP environment variable is defined and set to a valid directory name, unique file names will be generated for the directory specified by TMP.

If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, _tempnam will use the dir parameter as the path for which it will generate unique names.

If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, and if dir is either NULL or set to the name of a directory that does not exist, _tempnam will use the current working directory to generate unique names. Currently, if both TMP and dir specify names of directories that do not exist, the _tempnam function call will fail.
_tempnam будет генерировать уникальное имя файла в директории выбранной согласно следующим правилам:
Если переменная среды окружения TMP определена и установлена как валидный путь к директории, то уникальные имена файлов будут сгенерированы для директории определенной в TMP.
Если TMP не определена или установлена как имя несуществующей директории, _tempnam будет использовать параметр dir как путь для которого будут сгенерированы уникальные имена.
Если TMP не определена или установлена как имя несуществующей директории и если параметр dir равен NULL или имени директории, которой не существует, то _tempnam будет исопльзовать текущую рабочую директорию для генерации уникальных имен. В настоящее время, если и TMP и dir указывают на директории, которых не существует, вызов _tempnam завершится с ошибкой.

В общем все сложно с этой функцией у мелкомягких, как и со всеми остальными POSIX функциями.
Однако, я все равно не могу понять причины. Для чего создавать файл в директории с программой, если он все равно временный?
1
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
19.04.2011, 18:44  [ТС] #24
Ну всё ясно, короче. Всё плохо.
...Файл-то не временный в то-то и дело. Он может быть и постоянным. Просто используется такая функция, а так-то его можно и не удалять; а сам он точно не удалится.

Практическое применение этой функции- меньше заморочек с именами. Тем более, можно ведь давать имена файлам более или менее осмысленные, если использовать префикс.
Но это, кажись, уже в мечтах.
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
19.04.2011, 19:36 #25
Ну зачем такое нужно - можно представить. Другое дело - беда со стандартными функциями, да и тьфу на них. Придумать алгоритм генерёжки имён файлов из текущего времени и буковок на хвосте, если их (файлов) больше штуки в секунду генерится - в принципе не задача...
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.04.2011, 01:52 #26
msdn
Each of these functions returns the name of a file that does not currently exist. tmpnam returns a name unique in the current working directory
это не стандарт, а описание компилятора MSVC

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

написав код, который создаёт имя файла, полагая, что тот в текущей директории, может возникнуть ошибка на каком-нибудь другом компиляторе
(я приводил пример, где программа в каталоге $HOME/tmp/tests создаёт файлы в /tmp)

Цитата Сообщение от fasked
Посмотрите функцию tempnam.
она нестандарная

Цитата Сообщение от kravam
Так скажите ОПРЕДЕЛЁННО, что там говорится? Она что, на всём компе ищет имена файлов, дабы было с чем сравнивать, или как?
она ищет в каком-то месте, которое может варьироваться от компилятора к компилятору
но выдаёт весь путь, по которому можно сразу создавать файл

присоединяю инфу из C99. draft
там также говорится о нулевом указателе, который может вернуть функция
0
Миниатюры
Почему БЕЗОШИБОЧНО создаётся файл, а его не видно?  
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
20.04.2011, 12:23  [ТС] #27
Цитата Сообщение от accept Посмотреть сообщение
она ищет в каком-то месте, которое может варьироваться от компилятора к компилятору
Так может быть надо в настройках компилятора порыться?
Файл stdio.h


C++
1
2
3
4
5
6
7
8
9
10
11
/*
 * Tmpnam, tmpfile and, sometimes, _tempnam try to create
 * temp files in the root directory of the current drive
 * (not in pwd, as suggested by some older MS doc's).
 * Redefining these macros does not effect the CRT functions.
 */
#define _P_tmpdir   "\\"
#ifndef __STRICT_ANSI__
#define P_tmpdir _P_tmpdir
#endif
#define _wP_tmpdir  L"\\"
Вот это не смог перевести
"Redefining these macros does not effect the CRT functions."
Что такое CRT, знает кто-нибудь?

...Хотя
C++
1
#define _P_tmpdir   ".\\"
всё равно ничего не дало...
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.04.2011, 03:19 #28
Цитата Сообщение от kravam
Так может быть надо в настройках компилятора порыться?
нет, надо написать программу, которая годится для любых компиляторов
и это вполне реально

1. сгенерировать случайную последовательность символов
2. найти в каталоге все файлы
3. сравнить последовательность с именем каждого файла
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
21.04.2011, 09:37  [ТС] #29
Я хочу быть последовательным, раз уж встал вопрос о работоспособности моего, да и не только моего компилятора, надо его выяснить тык скыть до конца. А если щас я буду реализовывать tmpnam, то я её, конечно, реализую, но вопрос о компиляторе отложится в долгий ящик таким образом. А потом вообще зарастёт мхом. Нельзя этого допускать!

...Тем более, что считайте, что tmpnam реализована уже, тут трудностей нет никаких!
Начать с этой строки:
C++
1
Redefining these macros does not effect the CRT functions
Ребята, знает ли кто-нибудь её смысл?
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.04.2011, 10:41 #30
Цитата Сообщение от kravam Посмотреть сообщение
Ребята, знает ли кто-нибудь её смысл?
Переопределение данного макроса не несет эффекта на функции C Run-Time библиотек.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 10:41
Привет! Вот еще темы с ответами:

в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! - C++
Собсно //Это типа служебного класса. (Внимание! В оригинальном коде он вложен в класс xx, но я этого не стал делать, дабы не...

О том, почему нелюбим goto; как его правильно использовать; и чем в моем случае его можно заменить? - C++
Вот есть такой оператор всеми программистами нелюбимый. Goto называется. Говорят, что его использование всегда можно обойти и...

Почему не создаётся файл и не производится запись в пустой файл? - C (СИ)
Помогите разобраться почему не создаётся файл и не производится запись в пустой файл, в дебагере вроде как всё нормально, указатели и...

На вижу мой сайт на своем компе, на других компах его видно. Почему? - Web-серверы
Прошу прощения, если не в том разделе, прошу перенести по адресу. Суть проблемы. Я создала сайт и выложила на хостинг. Мой сайт виден с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
21.04.2011, 10:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru