2015-03-08 61 views
0

我执行这个C代码,它使用system()来调用dir命令,但将写入屏幕的所有字母改为小写。为什么提示给我“访问被拒绝”?

#include <ctype.h> 
#include <stdio.h> 
#include <stdlib.h> 

#define MAXSTRING 100 

int main(void){ 
    char command[MAXSTRING], *tmp_filename; 
    int c; 
    FILE *ifp; 

    tmp_filename = tmpnam(NULL); 
    sprintf(command, "dir > %s", tmp_filename); 
    system(command); 
    ifp = fopen(tmp_filename, "r"); 
    while ((c = getc(ifp)) != EOF) 
     putchar(tolower(c)); 
    remove(tmp_filename); 
    return 0; 
} 

我试着用“ls”的执行与Linux的代码改变“目录”,工程100%。为什么在Visual Studio中我获得“访问被拒绝”?谢谢。

+0

行尝试运行生成给予管理员权限的'.exe'文件。 – shauryachats 2015-03-08 17:47:45

+0

可能因为您无法访问您尝试访问的内容。在我的情况下,你的代码完美工作。我运行它没有任何管理权限。 – AnT 2015-03-08 17:53:04

+0

运行visual studio作为管理员的代码完美的作品! – wing 2015-03-08 18:03:11

回答

0

tmpnam在MSVC库中生成\name格式的名称。这意味着如果您直接使用该名称,则会尝试将某些内容写入当前驱动器的根目录中。显然你的账户没有权利这么做,这就是为什么你从dir得到“拒绝访问”的原因。

tmpnam保证该名称对于当前工作目录是唯一的,这意味着您应该确保在当前工作目录(不在驱动器的根目录中)创建该文件。您应该添加名称的完整路径,或摆脱前面的\。即按照

tmp_filename = tmpnam(NULL); 

// Assuming `tmp_filename` is not null 
if (*tmp_filename == '\\') 
    ++tmp_filename; 
+0

@AnT所以,如果我想在工作目录中创建文件而不是根目录,应该怎么做? 或者,我如何找到路径? – wing 2015-03-08 18:22:03